找回密码
 免费注册
计算机知识网 首页 文章 查看内容

C系统库

2025-12-21 09:52| 发布者: admin| 查看: 31| 评论: 0

 C 语言的 “系统库” 需区分标准 C 库(ANSI/ISO C 标准定义) 平台相关系统库(如 Linux/POSIX、Windows 特有库)—— 前者是跨平台的核心库,后者是操作系统提供的扩展库。以下是完整分类梳理,覆盖主流平台,且标注核心用途和头文件:

一、标准 C 库(ANSI C / ISO C99/C11/C17,跨平台)

标准 C 库由 ISO 标准定义,所有合规编译器(GCC、Clang、MSVC)均实现,是 C 语言的基础库,按功能分类如下:
库类别核心头文件核心功能
基础通用<stdio.h>输入输出(printf/scanf/fopen/fclose/fread/fwrite 等)
<stdlib.h>内存管理(malloc/free/calloc/realloc)、进程退出(exit)、随机数(rand)、类型转换(atoi)等
<string.h>字符串操作(strlen/strcpy/strcmp/strcat/memcpy/memset 等)
<ctype.h>字符判断 / 转换(isalpha/isdigit/toupper/tolower 等)
<limits.h>基本数据类型取值范围(INT_MAX/CHAR_BIT 等)
<stddef.h>标准类型定义(size_t/NULL/offsetof 等)
<stdarg.h>可变参数处理(va_start/va_arg/va_end,支持 printf-like 函数)
<errno.h>错误码定义(errno)和错误描述(perror)
数学计算<math.h>数学函数(sin/cos/sqrt/pow/exp/log/abs/fabs 等)
<complex.h>(C99+)复数运算(C99 新增)
<tgmath.h>(C99+)通用数学类型宏(C99 新增,简化复数 / 实数函数调用)
时间 / 日期<time.h>时间获取(time ())、转换(localtime/ctime)、计时(clock ())等
字符编码<wchar.h>(C95+)宽字符(Unicode)操作(wcslen/wcscpy 等)
<wctype.h>(C95+)宽字符判断(iswalpha/iswdigit 等)
本地化<locale.h>区域设置(setlocale)、数字 / 货币格式(localeconv)
断言 / 调试<assert.h>调试断言(assert (),Release 模式可禁用)
信号处理<signal.h>信号捕获(signal ())、异常终止(raise ())
浮点处理<fenv.h>(C99+)浮点环境控制(舍入模式、异常标志)
<float.h>浮点类型属性(FLT_MAX/DBL_PRECISION 等)
多字节字符<stdlib.h>(部分)多字节 / 宽字符转换(mbstowcs/wcstombs)
<wchar.h>(部分)多字节字符操作

二、POSIX 系统库(Linux/Unix/macOS/WSL,POSIX 标准)

这类库是 POSIX 标准(类 Unix 系统规范)扩展,非 ANSI C 标准,但 Linux/macOS 默认支持,也是你之前遇到sys/socket.h的所属范畴:
库类别核心头文件核心功能
进程 / 线程<pthread.h>多线程(pthread_create/pthread_join/pthread_mutex 等)
<unistd.h>进程控制(fork/exec/exit)、文件操作(read/write/close)、系统调用(getpid/chdir)
<sys/wait.h>进程等待(wait/waitpid)
<signal.h>(扩展)POSIX 信号(sigaction/sigqueue)
网络编程<sys/socket.h>套接字核心(socket/bind/listen/accept/connect)
<netinet/in.h>网络地址(sockaddr_in/INADDR_ANY/htons/ntohl)
<arpa/inet.h>IP 转换(inet_pton/inet_ntoa/inet_addr)
<netdb.h>域名解析(gethostbyname/getaddrinfo)
<sys/un.h>Unix 域套接字(本地进程通信)
文件 / 目录<sys/stat.h>文件属性(stat/lstat/chmod/chown)
<fcntl.h>文件控制(open/dup/fcntl,比 stdio.h 更底层)
<dirent.h>目录遍历(opendir/readdir/closedir)
<sys/file.h>文件锁(flock)
内存 / 共享内存<sys/mman.h>内存映射(mmap/munmap)、共享内存
<sys/shm.h>System V 共享内存(shmget/shmat/shmdt)
进程间通信(IPC)<sys/msg.h>System V 消息队列
<sys/sem.h>System V 信号量
<poll.h>I/O 多路复用(poll,替代 select)
<sys/select.h>I/O 多路复用(select)
系统信息<sys/utsname.h>获取系统信息(uname)
<sys/resource.h>系统资源限制(getrlimit/setrlimit)
时间 / 定时器<sys/time.h>高精度时间(gettimeofday)、定时器(setitimer)
<time.h>(POSIX 扩展)线程睡眠(nanosleep)、时钟(clock_gettime)
用户 / 权限<pwd.h>用户信息(getpwnam/getpwuid)
<grp.h>组信息(getgrnam/getgrgid)
<shadow.h>影子密码(仅 root 可访问)

三、Windows 系统库(非 POSIX,微软扩展)

Windows 不遵循 POSIX,提供自有系统库,替代 POSIX 功能,核心如下:
库类别核心头文件核心功能
套接字 / 网络<winsock2.h>/<ws2tcpip.h>Windows 套接字(WSAStartup/closesocket/WSACleanup,替代 sys/socket.h)
进程 / 线程<windows.h>进程(CreateProcess)、线程(CreateThread)、互斥锁(CreateMutex)
<process.h>简单进程 / 线程操作(_beginthread/_endthread)
文件 / 目录<windows.h>文件操作(CreateFile/ReadFile/WriteFile,替代 open/read)
<direct.h>目录操作(_mkdir/_rmdir/_chdir,替代 mkdir/rmdir/chdir)
系统信息<windows.h>获取系统信息(GetVersionEx)、环境变量(GetEnvironmentVariable)
同步 / IPC<synchapi.h>同步对象(WaitForSingleObject/SignalObjectAndWait)
<mmsystem.h>定时器(timeSetEvent)

四、关键说明(避坑 + 实用)

  1. 跨平台注意
    • 标准 C 库(如<stdio.h>/<stdlib.h>)可放心跨平台使用;
    • POSIX 库(<sys/socket.h>/<pthread.h>)仅 Linux/macOS/WSL 支持,Windows 需用 MinGW 模拟或替换为 Windows API;
    • Windows 特有库(<winsock2.h>/<windows.h>)无法在 Linux 运行。
  2. 库的链接方式
    • 标准 C 库(如<stdio.h>/<math.h>):编译时默认链接,无需加-l参数;
    • 数学库<math.h>:部分编译器(如 GCC)需加-lmgcc test.c -o test -lm);
    • POSIX 线程库<pthread.h>:需加-lpthreadgcc test.c -o test -lpthread);
    • Windows 库:<winsock2.h>需链接ws2_32.libgcc test.c -o test -lws2_32#pragma comment(lib, "ws2_32.lib"))。
  3. 查找系统库的方法
    • Linux/macOS:用man命令查头文件(如man socket看 sys/socket.h 的用法),用pkg-config查库链接参数(如pkg-config --cflags --libs pthread);
    • Windows:查看 MSDN 文档(如 Winsock2 的官方文档)。
  4. 不要混淆 “头文件” 和 “库文件”
    • 头文件(.h):声明函数 / 类型,告诉编译器 “有这个功能”;
    • 库文件(.so/.a/.lib/.dll):实现函数,编译时链接到可执行文件。

路过

雷人

握手

鲜花

鸡蛋

点击此处联系本站|关于我们|违规用户|手机版|计算机知识网 ( 豫ICP备15021710号 ) IP: 216.73.216.128 |捐助本站

计算机知识网上的所有内容均来自于网络和网友,并不代表本站立场。如有侵权,请联系QQ:1078292299我们会尽快删除。
声明:严禁任何人以任何形式在本站发表与中华人民共和国法律相抵触的言论!

GMT+8, 2026-1-26 19:56

...