mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-26 04:54:07 +01:00
97759ccc71
Remove ancient SCCS tags from the tree, automated scripting, with two minor fixup to keep things compiling. All the common forms in the tree were removed with a perl script. Sponsored by: Netflix
382 lines
9.3 KiB
Groff
382 lines
9.3 KiB
Groff
.\" Copyright (c) 1980, 1991, 1993
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
.\"
|
|
.\" 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.
|
|
.\" 3. Neither the name of the University nor the names of its contributors
|
|
.\" may be used to endorse or promote products derived from this software
|
|
.\" without specific prior written permission.
|
|
.\"
|
|
.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS 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 REGENTS 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.
|
|
.Dd November 16, 2023
|
|
.Dt INTRO 3
|
|
.Os
|
|
.Sh NAME
|
|
.Nm intro
|
|
.Nd introduction to the C libraries
|
|
.Sh SYNOPSIS
|
|
.Nm cc
|
|
.Op Ar flags
|
|
.Ar
|
|
.Op Fl llibrary
|
|
.Sh DESCRIPTION
|
|
This section provides an overview of the C
|
|
library functions, their error returns and other
|
|
common definitions and concepts.
|
|
Most of these functions are available from the C library,
|
|
.Em libc .
|
|
Other libraries, such as the math library,
|
|
.Em libm ,
|
|
must be indicated at compile time with the
|
|
.Fl l
|
|
option of the compiler.
|
|
.Pp
|
|
The various libraries (followed by the loader flag):
|
|
.Bl -tag -width "libbluetooth"
|
|
.It Em libbluetooth
|
|
.Pq Fl l Ns Ar bluetooth
|
|
The bluetooth library.
|
|
See
|
|
.Xr bluetooth 3 .
|
|
.It Em libc
|
|
.Pq Fl l Ns Ar c
|
|
Standard C library functions.
|
|
When using the C compiler
|
|
.Xr cc 1 ,
|
|
it is not necessary
|
|
to supply the loader flag
|
|
.Fl l Ns Ar c
|
|
for these functions.
|
|
There are several `libraries' or groups of functions included inside of
|
|
.Em libc :
|
|
.Bl -tag -width "XXXXXX"
|
|
.It standard I/O routines
|
|
see
|
|
.Xr stdio 3
|
|
.It database routines
|
|
see
|
|
.Xr db 3
|
|
.It bit operators
|
|
see
|
|
.Xr bitstring 3
|
|
.It string operators
|
|
see
|
|
.Xr string 3
|
|
.It character tests and character operators
|
|
.It storage allocation
|
|
see
|
|
.Xr mpool 3
|
|
.It regular-expressions
|
|
see
|
|
.Xr regex 3
|
|
.It remote procedure calls (RPC)
|
|
see
|
|
.Xr rpc 3
|
|
.It time functions
|
|
see
|
|
.Xr time 3
|
|
.It signal handling
|
|
see
|
|
.Xr signal 3
|
|
.El
|
|
.It Em libcalendar
|
|
.Pq Fl l Ns Ar calendar
|
|
The calendar arithmetic library.
|
|
See
|
|
.Xr calendar 3 .
|
|
.It Em libcam
|
|
.Pq Fl l Ns Ar cam
|
|
The common access method user library.
|
|
See
|
|
.Xr cam 3 .
|
|
.It Em libcrypt
|
|
.Pq Fl l Ns Ar crypt
|
|
The crypt library.
|
|
See
|
|
.Xr crypt 3 .
|
|
.It Em libcurses
|
|
.Pq Fl l Ns Ar curses Fl l Ns Ar termcap
|
|
Terminal independent screen management routines
|
|
for two dimensional non-bitmap display terminals.
|
|
See
|
|
.Xr ncurses 3 .
|
|
.It Em libcuse
|
|
.Pq Fl l Ns Ar cuse
|
|
The userland character device library.
|
|
See
|
|
.Xr cuse 3 .
|
|
.It Em libcompat
|
|
.Pq Fl l Ns Ar compat
|
|
Functions which are obsolete but are available for compatibility with
|
|
.Bx 4.3 .
|
|
In particular,
|
|
a number of system call interfaces provided in previous releases of
|
|
.Bx
|
|
have been included for source code compatibility.
|
|
Use of these routines should, for the most part, be avoided.
|
|
The manual page entry for each compatibility routine
|
|
indicates the proper interface to use.
|
|
.It Em libdevinfo
|
|
.Pq Fl l Ns Ar devinfo
|
|
The Device and Resource Information Utility library.
|
|
See
|
|
.Xr devinfo 3 .
|
|
.It Em libdevstat
|
|
.Pq Fl l Ns Ar devstat
|
|
The Device Statistics library.
|
|
See
|
|
.Xr devstat 3 .
|
|
.It Em libdwarf
|
|
.Pq Fl l Ns Ar dwarf
|
|
The DWARF access library.
|
|
See
|
|
.Xr dwarf 3 .
|
|
.It Em libelf
|
|
.Pq Fl l Ns Ar elf
|
|
The ELF access library.
|
|
See
|
|
.Xr elf 3 .
|
|
.It Em libfetch
|
|
.Pq Fl l Ns Ar fetch
|
|
The file transfer library.
|
|
See
|
|
.Xr fetch 3 .
|
|
.It Em libfigpar
|
|
.Pq Fl l Ns Ar figpar
|
|
The configuration file parsing library.
|
|
See
|
|
.Xr figpar 3 .
|
|
.It Em libgpio
|
|
.Pq Fl l Ns Ar gpio
|
|
The general-purpose input output library (GPIO).
|
|
See
|
|
.Xr gpio 3 .
|
|
.It Em libgssapi
|
|
.Pq Fl l Ns Ar gssapi
|
|
The generic security service application programming
|
|
interface.
|
|
See
|
|
.Xr gssapi 3 .
|
|
.It Em libjail
|
|
.Pq Fl l Ns Ar jail
|
|
The jail library.
|
|
See
|
|
.Xr jail 3 .
|
|
.It Em libkvm
|
|
.Pq Fl l Ns Ar kvm
|
|
Functions used to access kernel memory are in this library.
|
|
They can be used
|
|
against both a running system and a crash dump.
|
|
See
|
|
.Xr kvm 3 .
|
|
.It Em libl
|
|
.Pq Fl l Ns Ar l
|
|
The library for
|
|
.Xr lex 1 .
|
|
.It Em libm
|
|
.Pq Fl l Ns Ar m
|
|
The math library.
|
|
See
|
|
.Xr math 3 .
|
|
.It Em libmd
|
|
.Pq Fl l Ns Ar md
|
|
The message digest library.
|
|
See
|
|
.Xr md4 3 ,
|
|
.Xr md5 3 ,
|
|
.Xr sha 3 ,
|
|
.Xr sha256 3 ,
|
|
.Xr sha512 3 ,
|
|
.Xr ripemd 3 ,
|
|
.Xr skein 3 .
|
|
.It Em libmp
|
|
.Pq Fl l Ns Ar mp
|
|
.It Em libpam
|
|
.Pq Fl l Ns Ar pam
|
|
The pluggable authentication module library.
|
|
See
|
|
.Xr pam 3 .
|
|
.It Em libpcap
|
|
.Pq Fl l Ns Ar pcap
|
|
The packet capture library.
|
|
See
|
|
.Xr pcap 3 .
|
|
.It Em libpmc
|
|
.Pq Fl l Ns Ar pmc
|
|
The performance counters library.
|
|
See
|
|
.Xr pmc 3 .
|
|
.It Em libpthread
|
|
.Pq Fl l Ns Ar pthread
|
|
The POSIX threads library.
|
|
See
|
|
.Xr pthread 3 .
|
|
.It Em libstdthreads
|
|
.Pq Fl l Ns Ar stdthreads
|
|
The ISO C11 standard
|
|
.In threads.h
|
|
library.
|
|
See
|
|
.Xr thrd_create 3 .
|
|
.It Em libsysdecode
|
|
.Pq Fl l Ns Ar sysdecode
|
|
The system argument decoding library.
|
|
See
|
|
.Xr sysdecode 3 .
|
|
.It Em libtermcap
|
|
.Pq Fl l Ns Ar termcap
|
|
The terminal independent operation library package.
|
|
See
|
|
.Xr termcap 3 .
|
|
.It Em libusb
|
|
.Pq Fl l Ns Ar usb
|
|
The USB access library.
|
|
See
|
|
.Xr usb 3 .
|
|
.It Em libvgl
|
|
.Pq Fl l Ns Ar vgl
|
|
The video graphics library.
|
|
See
|
|
.Xr vgl 3 .
|
|
.It Em liby
|
|
.Pq Fl l Ns Ar y
|
|
The library for
|
|
.Xr yacc 1 .
|
|
.It Em libz
|
|
.Pq Fl l Ns Ar z
|
|
The general-purpose data compression library.
|
|
See
|
|
.Xr zlib 3 .
|
|
.El
|
|
.Sh FILES
|
|
.Bl -tag -width /usr/lib/libm_p.a -compact
|
|
.It Pa /usr/lib/libc.a
|
|
the C library
|
|
.It Pa /usr/lib/libc_p.a
|
|
the C library compiled for profiling
|
|
.It Pa /usr/lib/libm.a
|
|
the math library
|
|
.It Pa /usr/lib/libm_p.a
|
|
the math library compiled for profiling
|
|
.El
|
|
.Sh LIBRARY TYPES
|
|
The system libraries are located in
|
|
.Pa /lib
|
|
and
|
|
.Pa /usr/lib .
|
|
A library has the following naming convention:
|
|
.Bd -unfilled -offset indent
|
|
libc.so.7
|
|
.Ed
|
|
.Pp
|
|
Libraries with an
|
|
.Sq .a
|
|
suffix are static.
|
|
When a program is linked against a static library, all necessary library code
|
|
will be included in the binary.
|
|
This means the binary can be run even when the libraries are unavailable.
|
|
However, it can be inefficient with both disk space and memory usage
|
|
during execution.
|
|
The C compiler,
|
|
.Xr cc 1 ,
|
|
can be instructed to link statically by specifying the
|
|
.Fl static
|
|
flag.
|
|
.Pp
|
|
Libraries with a
|
|
.Sq .so.X
|
|
suffix are dynamic libraries.
|
|
When code is linked dynamically, the library code that the application needs
|
|
is not included in the binary.
|
|
Instead, data structures are added containing information about which dynamic
|
|
libraries to link with.
|
|
When the binary is executed, the run-time linker
|
|
.Xr ld.so 1
|
|
reads these data structures and loads them into the
|
|
process virtual address space.
|
|
.Xr rtld 1
|
|
loads the shared libraries when the program is executed.
|
|
.Pp
|
|
.Sq X
|
|
represents the library version number of the library.
|
|
In the example above, a binary linked with
|
|
.Pa libc.so.8
|
|
would not be usable on a system where only
|
|
.Pa libc.so.7
|
|
is available.
|
|
.Pp
|
|
The advantages of dynamic libraries are that multiple instances of the same
|
|
library can share address space, and the physical size of the binary is
|
|
smaller.
|
|
A namespace per shared library is available via hidden visibility,
|
|
allowing multiple compilation units in a library to share things without
|
|
making them available to other libraries.
|
|
It is possible to load libraries dynamically via
|
|
.Xr dlopen 3 .
|
|
The disadvantage is the added complexity that comes with loading the
|
|
libraries dynamically, and the extra time taken to load the libraries.
|
|
Of course, if the libraries are not available, the binary will be unable
|
|
to execute.
|
|
Calls across shared libraries are also slightly slower and cannot be
|
|
inlined, not even with link time optimization.
|
|
The C compiler,
|
|
.Xr cc 1 ,
|
|
can be instructed to link dynamically by specifying the
|
|
.Fl shared
|
|
flag.
|
|
.Pp
|
|
Shared libraries, as well as static libraries on architectures which produce
|
|
position-independent executables
|
|
.Pq PIEs
|
|
by default, contain position-independent code
|
|
.Pq PIC .
|
|
Normally, compilers produce relocatable code.
|
|
Relocatable code needs to be modified at run-time, depending on where in
|
|
memory it is to be run.
|
|
The C compiler,
|
|
.Xr cc 1 ,
|
|
can be instructed to generate PIC code by specifying the
|
|
.Fl fPIC
|
|
flag.
|
|
.Pp
|
|
Static libraries are generated using the
|
|
.Xr ar 1
|
|
utility.
|
|
The libraries contain an index to the contents of the library,
|
|
stored within the library itself.
|
|
The index lists each symbol defined by a member of a library that is a
|
|
relocatable object file.
|
|
This speeds up linking to the library, and allows routines in the library
|
|
to call each other regardless of their placement within the library.
|
|
.Sh SEE ALSO
|
|
.Xr ar 1 ,
|
|
.Xr cc 1 ,
|
|
.Xr ld 1 ,
|
|
.Xr nm 1 ,
|
|
.Xr intro 2 ,
|
|
.Xr math 3 ,
|
|
.Xr stdio 3 ,
|
|
.Xr make.conf 5 ,
|
|
.Xr src.conf 5
|
|
.Sh HISTORY
|
|
An
|
|
.Nm
|
|
manual appeared in
|
|
.At v7 .
|