What is the C library?

The system's C runtime offers a set of standard functions called the C library to developers so they may carry out typical tasks without having to start from scratch when writing code. It offers a number of features, such as memory management, string manipulation, input/output processing, mathematical calculations, and other utility functions.

The most widely used C library is the standard C library, also referred to as libc, which complies with the ANSI C or ISO C C standards. Many Unix-like systems, including Linux, use the GNU C Library (glibc), which is an implementation of the standard C library.

Because it offers the fundamental functions required to write C programs, the C library is crucial for C programming. The C compiler links your code with the C library automatically when you compile a program, enabling you to use the functions the library provides.

For instance, you can use the following procedures to determine which Ubuntu library has the printf function, where the library file is stored, and a list of other functions specified in that library:

  1. Identify the Library Containing printf: The printf function is part of the C standard library, which is implemented in the GNU C Library (glibc) on Linux systems. The actual library file is usually named libc.so.6.

  2. Find the Location of the Library: To find where the libc library is located, you can use the locate command:

     locate libc.so.6
    

    Before using locate, make sure the database is up to date by running sudo updatedb.

  3. List Functions in the Library: To list the functions in the libc library, including printf, you can use the nm command with the --defined-only option to list only the symbols defined in the specified library:

     nm -D --defined-only /path/to/libc.so.6
    

    Replace /path/to/libc.so.6 with the actual path to the libc library file on your system.

  4. Filter for printf: If you want to specifically check for printf, you can pipe the output to grep:

     nm -D --defined-only /path/to/libc.so.6 | grep ' printf'
    
  5. Read the Library's Documentation: For a more comprehensive list of functions and their descriptions, you can read the glibc manual by using the man command:

     man glibc
    

These steps will help you identify the printf function, its library, and other functions within that library. Remember to replace /path/to/libc.so.6 with the actual path if you're using the nm command.

Below is a table showcasing some commonly used header files in the C standard library along with important functions they provide. This list is not exhaustive but covers many of the core functionalities:

Header FileDescriptionImportant Functions
<stdio.h>Standard Input/Output functionsprintf(), scanf(), fgets(), fputs(), fopen(), fclose(), fprintf(), fscanf()
<stdlib.h>Standard Utility functionsmalloc(), free(), exit(), atoi(), rand(), qsort()
<string.h>String handling functionsstrcpy(), strcat(), strlen(), strcmp(), strncpy(), strchr(), strstr()
<math.h>Mathematical functionspow(), sqrt(), sin(), cos(), tan(), log(), exp()
<time.h>Date and time functionstime(), localtime(), asctime(), strftime(), difftime()
<ctype.h>Character handling functionsisdigit(), isalpha(), islower(), isupper(), tolower(), toupper()
<limits.h>Sizes of basic types (limits)INT_MAX, INT_MIN, CHAR_BIT, LONG_MAX, UINT_MAX
<errno.h>Error number and message handlingerrno, strerror(), perror()
<stddef.h>Standard type definitionssize_t, ptrdiff_t, NULL
<assert.h>Diagnosticsassert()
<float.h>Limits of floating-point typesFLT_MAX, DBL_MAX, LDBL_MAX, FLT_DIG, DBL_DIG
<setjmp.h>Nonlocal jumpssetjmp(), longjmp()
<signal.h>Signal handling functionssignal(), raise()
<stdarg.h>Handling of variable argument listva_start(), va_arg(), va_end()
<stdint.h>Integer typesint32_t, uint32_t, int64_t, uint64_t
<stdbool.h>Boolean type and valuesbool, true, false
<locale.h>Localization functionssetlocale(), localeconv()
<stddef.h>Commonly used types and macrosNULL, offsetof(), size_t, wchar_t
<stdint.h>Fixed-width integer typesint8_t, uint8_t, int16_t, uint16_t, int32_t, uint32_t, int64_t, uint64_t
<tgmath.h>Type-generic math (C99)Generic versions of math functions
<complex.h>Complex number arithmetic (C99)cimag(), creal(), cabs(), cpow(), csqrt()

The foundation of many common C programming activities is made up of these header files and functions. Every header file supports a certain set of functions, from simple I/O operations to intricate mathematical computations. Remember that while these functions usually follow the C standard (C89/C90, C99, or C11), their availability and behavior may differ slightly based on the operating system and the compiler.

0
Subscribe to my newsletter

Read articles from Jyotiprakash Mishra directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Jyotiprakash Mishra
Jyotiprakash Mishra

I am Jyotiprakash, a deeply driven computer systems engineer, software developer, teacher, and philosopher. With a decade of professional experience, I have contributed to various cutting-edge software products in network security, mobile apps, and healthcare software at renowned companies like Oracle, Yahoo, and Epic. My academic journey has taken me to prestigious institutions such as the University of Wisconsin-Madison and BITS Pilani in India, where I consistently ranked among the top of my class. At my core, I am a computer enthusiast with a profound interest in understanding the intricacies of computer programming. My skills are not limited to application programming in Java; I have also delved deeply into computer hardware, learning about various architectures, low-level assembly programming, Linux kernel implementation, and writing device drivers. The contributions of Linus Torvalds, Ken Thompson, and Dennis Ritchie—who revolutionized the computer industry—inspire me. I believe that real contributions to computer science are made by mastering all levels of abstraction and understanding systems inside out. In addition to my professional pursuits, I am passionate about teaching and sharing knowledge. I have spent two years as a teaching assistant at UW Madison, where I taught complex concepts in operating systems, computer graphics, and data structures to both graduate and undergraduate students. Currently, I am an assistant professor at KIIT, Bhubaneswar, where I continue to teach computer science to undergraduate and graduate students. I am also working on writing a few free books on systems programming, as I believe in freely sharing knowledge to empower others.