【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库(二)

简介: 【C语言】标准库(头文件、静态库、动态库),windows与Linux平台下的常用C语言标准库

5.2 windows常用头文件

挑几个介绍吧。

01. windows.h——窗口、进程、线程

windows.h 是用于 Windows 平台的 C 和 C++ 程序开发的头文件。它包含了许多 Windows API 函数和宏定义,用于操作和管理 Windows 操作系统的各个方面。以下是 windows.h 中一些常用的内容:

1.窗口和消息相关的函数和宏:

CreateWindowEx:用于创建窗口。

RegisterClassEx:用于注册窗口类。

GetMessage 和 DispatchMessage:用于处理消息循环。

SendMessage 和 PostMessage:用于发送消息到窗口过程。

DefWindowProc:默认的窗口过程函数。


2.文件和文件系统相关的函数和宏:

CreateFile 和 CloseHandle:用于创建和关闭文件句柄。

ReadFile 和 WriteFile:用于读取和写入文件内容。

FindFirstFile 和 FindNextFile:用于查找文件和目录。

SetFileAttributes 和 GetFileAttributes:用于设置和获取文件属性。


3.进程和线程相关的函数和宏:

CreateProcess 和 TerminateProcess:用于创建和终止进程。

GetCurrentProcess 和 GetCurrentThread:用于获取当前进程和线程的句柄。

CreateThread 和 ExitThread:用于创建和退出线程。

Sleep 和 WaitForSingleObject:用于控制线程的等待和延迟。


4.动态链接库(DLL)相关的函数和宏:

LoadLibrary 和 FreeLibrary:用于加载和释放 DLL。

GetProcAddress:用于获取 DLL 中的函数地址。

此外,windows.h 还包含了许多其他用于操作窗口、图形、网络、注册表、安全性等方面的函数和宏定义。它是 Windows 平台上开发 Windows 应用程序和系统级软件的关键头文件之一。通过使用 windows.h,开发者可以访问 Windows API,并利用丰富的功能和特性来创建强大的 Windows 应用程序。

02. winsock2.h——windows网络套接字

winsock2.h 是 Windows 平台上用于网络编程的头文件。它提供了许多函数、结构体和常量,用于创建和管理网络套接字(sockets),实现网络通信。winsock2.h 是在 Windows Sockets 2(Winsock2)规范下开发网络应用程序的关键头文件。


以下是 winsock2.h 中一些常用的内容:


1.套接字相关的函数和结构体:

socket:创建套接字。

bind 和 connect:绑定或连接套接字。

listen 和 accept:监听和接受连接。

send 和 recv:发送和接收数据。

closesocket:关闭套接字。


2.地址和协议相关的结构体和常量:

sockaddr 和 sockaddr_in:用于表示套接字地址信息。

AF_INET 和 AF_INET6:表示 IPv4 和 IPv6 地址族。

SOCK_STREAM 和 SOCK_DGRAM:表示 TCP 和 UDP 套接字类型。

IPPROTO_TCP 和 IPPROTO_UDP:表示 TCP 和 UDP 协议。


3.初始化和清理函数:

WSAStartup 和 WSACleanup:初始化和清理 Winsock 库。

通过使用 winsock2.h 中的函数、结构体和常量,开发者可以创建网络应用程序,实现数据的传输和通信。它提供了对套接字编程的支持,使您能够创建网络连接、发送和接收数据、处理网络事件等。winsock2.h 是开发 Windows 平台上网络应用程序的重要组成部分,并且与其他网络库(如 TCP/IP)集成使用,以构建功能丰富的网络应用。


更高级的还有:mswsock.h

03. shellapi.h——shell编程

shellapi.h 是 Windows 平台上用于 Shell 编程的头文件。它提供了一些函数和结构体,用于与操作系统的 Shell 执行交互,包括文件操作、快捷方式管理、系统托盘图标等。


以下是 shellapi.h 中一些常用的内容:


1.文件和文件夹操作函数:

ShellExecute:打开文件、文件夹或运行应用程序。

SHGetFolderPath:获取特定文件夹路径。

SHCreateDirectoryEx:创建目录。

SHFileOperation:执行文件和文件夹的操作,如复制、移动、删除等。


2.快捷方式和图标管理函数:

SHGetSpecialFolderPath:获取特殊文件夹路径,如桌面、开始菜单等。

SHGetFileInfo:获取文件或文件夹的图标和其他属性信息。

SHCreateShortcut:创建快捷方式。

SHChangeNotify:通知系统有关文件和文件夹的更改。


3.系统托盘图标函数:

Shell_NotifyIcon:在系统托盘中显示和管理图标。

Shell_NotifyIconGetRect:获取系统托盘的位置和尺寸。

通过使用 shellapi.h 中的函数和结构体,开发者可以与 Windows Shell 进行交互,实现文件操作、快捷方式管理、系统托盘图标等功能。它为应用程序提供了与操作系统桌面环境的集成,使您能够执行与文件、文件夹和系统界面相关的操作。shellapi.h 是开发 Windows 平台上与 Shell 相关功能的重要头文件之一,为开发者提供了方便而强大的 Shell 编程接口。

5.3 Linux常用头文件

01. unistd.h——系统相关(进程、文件等)

unix standrad.


unistd.h 用于提供对操作系统服务的访问和控制。尽管它是在类 Unix 系统上常见的头文件,但它并不是标准的 C 或 C++ 头文件,而是与操作系统相关的特定头文件。


以下是 unistd.h 中一些常见的功能和函数:


1.系统调用和进程控制:

fork:创建一个子进程。

exec 系列函数:在当前进程中执行新的程序。

exit:终止当前进程的执行。

getpid 和 getppid:获取当前进程和父进程的进程 ID。


2.文件和目录操作:

open 和 close:打开和关闭文件。

read 和 write:从文件中读取和写入数据。

lseek:移动文件指针。

access:检查文件的访问权限。

mkdir 和 rmdir:创建和删除目录。


3.系统资源管理:

sleep:使当前进程挂起指定的时间。

getcwd:获取当前工作目录。

chdir:改变当前工作目录。

gethostname:获取主机名。

getlogin:获取登录名。


4.进程间通信(IPC):

pipe:创建一个管道用于进程间通信。

dup 和 dup2:复制文件描述符。

fork 和 exec 系列函数:在进程间传递状态和数据。

unistd.h 提供了对类 Unix 系统的许多常见功能的访问,使程序能够与操作系统进行交互,并进行进程管理、文件操作和系统资源管理。需要注意的是,unistd.h 在不同的类 Unix 系统上可能会有所不同,因此一些函数和功能在特定系统上可能不可用或有不同的行为。

02. fcntl.h——文件操作

fcntl.h 用于提供对文件描述符的控制和和操作。它定义了一些常量和函数,用于控制文件的属性、打开和关闭文件以及文件锁定等操作。


以下是 fcntl.h 中一些常见的功能和函数:


1.文件控制:

open:打开文件并返回一个文件描述符。

creat:创建一个新文件。

close:关闭文件。


2.文件状态标志(File Status Flags):

O_RDONLY、O_WRONLY、O_RDWR:打开文件的读取、写入、读写模式。

O_APPEND:追加写入文件。

O_CREAT、O_EXCL:创建文件并验证文件不存在。

O_TRUNC:将文件截断为零长度。


3.文件控制操作:

fcntl:对文件描述符进行各种控制操作。

dup、dup2:复制文件描述符。


4.文件锁定:

flock:对文件进行简单的全局锁定。

fcntl:使用 F_SETLK、F_SETLKW 等命令进行更复杂的文件锁定。

fcntl.h 提供了一些用于文件描述符控制和操作的函数和常量,使程序能够在类 Unix 系统上对文件进行更精细的控制和操作。需要注意的是,fcntl.h 在不同的类 Unix 系统上可能会有所不同,因此一些函数和常量的行为可能会有所差异。

03. sys/types.h——操作系统相关的数据类型定义

sys/types.h 用于定义一些基本数据类型和数据结构。它包含了一些与操作系统相关的数据类型和宏定义,以便在编程中使用。


以下是 sys/types.h 中一些常见的内容:


1.数据类型定义:

size_t:用于表示对象的大小。

ssize_t:用于表示有符号的对象大小。

time_t:用于表示时间值。

off_t:用于表示文件偏移量。

pid_t:用于表示进程 ID。

uid_t 和 gid_t:用于表示用户 ID 和组 ID。

2.文件类型和模式定义:

mode_t:用于表示文件的权限模式。

dev_t:用于表示设备的标识符。

3.其他常见的数据类型和宏:

int8_t、int16_t、int32_t、int64_t:用于表示固定大小的整数类型。

intptr_t 和 uintptr_t:用于表示指针类型的整数值。

NULL:表示空指针常量。

sys/types.h 提供了一些与操作系统相关的数据类型定义,为程序提供了可移植性和代码可读性。通过包含 sys/types.h 头文件,可以使用其中定义的数据类型和宏,以便在类 Unix 系统上进行编程和开发。需要注意的是,sys/types.h 是与操作系统相关的头文件,在不同的操作系统上可能会有所不同。

04. sys/stat.h——文件状态

sys/stat.h 用于获取文件和文件系统的状态信息。它定义了一些常量和结构体,用于描述文件的属性、权限、时间戳等信息。


以下是 sys/stat.h 中一些常见的内容:


1.文件访问权限:

S_IRUSR、S_IWUSR、S_IXUSR:用户(所有者)的读、写、执行权限。

S_IRGRP、S_IWGRP、S_IXGRP:用户组的读、写、执行权限。

S_IROTH、S_IWOTH、S_IXOTH:其他用户的读、写、执行权限。

2.文件类型和模式:

S_IFMT:用于提取文件类型的位掩码。

S_IFREG、S_IFDIR、S_IFLNK 等:表示不同文件类型的位掩码。

S_ISREG()、S_ISDIR()、S_ISLNK() 等:用于检查文件类型的宏。

3.文件状态结构体:

struct stat:用于描述文件的状态信息,包括文件大小、权限、时间戳等。

4.文件属性获取函数:

stat、lstat:获取文件的状态信息。

fstat:获取打开文件的状态信息。

sys/stat.h 提供了一些用于获取文件状态信息的常量、结构体和函数,使程序能够获取和操作文件的属性和权限等信息。通过包含 sys/stat.h 头文件,可以在类 Unix 系统上进行文件和文件系统相关的编程和开发。需要注意的是,sys/stat.h 是与操作系统相关的头文件,在不同的操作系统上可能会有所不同。

05. sys/socket.h——套接字

sys/socket.h 主要作用是定义了与套接字(socket)相关的各种数据类型、常量和函数,包含了许多网络编程所需的头文件。


“sys/socket.h” 中包含的函数和常量如下:


函数:


socket():创建一个新的套接字

bind():将套接字绑定到地址指定的端口号

listen():监听套接字上的连接请求

accept():接收客户端的连接请求

connect():建立与远程服务器的连接

recv():从套接字中接收数据

send():将数据发送到套接字

close():关闭一个套接字

shutdown():关闭一个已建立的连接(这两个有区别,本文暂不不讲解)

常量:


AF_INET:IPv4 协议的地址族,又称为 Internet 地址族

AF_UNIX:Unix 协议的地址族

SOCK_STREAM:提供面向连接、可靠的数据传输服务的套接字类型

SOCK_DGRAM:提供面向无连接、不可靠的数据传输服务的套接字类型

IPPROTO_TCP:TCP 协议的协议号

IPPROTO_UDP:UDP 协议的协议号

除此之外,“sys/socket.h” 中还定义了一些结构体如 sockaddr、sockaddr_in 等,这些结构体用于套接字地址的表示和传输。使用这些结构体可以更方便地操作套接字地址。


“sys/socket.h” 和 “winsock2.h” 都是用于进行套接字编程的头文件,但它们之间有几个重要的差异。

1.操作系统平台不同

“sys/socket.h” 是 UNIX 和 Linux 等类 UNIX 操作系统的头文件,而 “winsock2.h” 则是 Windows 操作系统的头文件。


2.函数调用方式不同

UNIX 系统上使用标准的函数调用方式来执行套接字操作,而 Windows 系统上则使用 Windows 套接字 API (也称为 Winsock)。


3.数据类型不同

“sys/socket.h” 和 “winsock2.h” 定义了不同的数据类型,例如 “struct sockaddr” 和"SOCKADDR" 表示套接字地址的结构体,在 UNIX 系统上使用前者,在 Windows 上使用后者。


4.常量和枚举值不同

“sys/socket.h” 和 “winsock2.h” 中定义的常量和枚举值也不同,例如在 UNIX 系统上使用 AF_INET 表示IPv4 地址族,在 Windows 系统上则使用 AF_INET 或 AF_INET6(表示 IPv6 地址族)。

06. sys/time.h——处理时间

sys/time.h 用于处理时间和时间相关的操作。它定义了一些与时间和时间操作相关的结构体、常量和函数。


以下是 sys/time.h 中一些常见的内容:


1.时间结构体:

struct timeval:表示时间值,包括秒数和微秒数。

2.时间获取函数:

gettimeofday:获取当前时间。

3.定时器操作函数:

timeradd、timersub、timerclear:对时间进行加法、减法和清零操作。

4.时间转换函数:

gmtime、localtime:将时间转换为本地时间或协调世界时(UTC)时间。

strftime:将时间格式化为字符串。

sys/time.h 提供了一些用于处理时间和时间操作的结构体和函数,使程序能够获取、操作和转换时间。通过包含 sys/time.h 头文件,可以在类 Unix 系统上进行与时间相关的编程和开发。需要注意的是,sys/time.h 是与操作系统相关的头文件,在不同的操作系统上可能会有所不同。


sys/time.htime.h 都是用于处理时间和时间相关操作的头文件,但它们在功能和使用上有一些区别。

sys/time.h 是一个系统头文件,在类 Unix系统中使用。它提供了对时间的更底层的处理,包括获取当前时间、定时器操作、时间结构体等。它通常用于需要更高精度或更底层的时间操作,比如微秒级的计时和定时器功能。


time.h 是标准 C 库中的头文件,提供了与时间相关的基本函数和结构体。它包含了用于获取当前时间、时间格式化、时间转换等功能,如 time、localtime、strftime 等函数。它在标准 C 环境下使用,并且提供了对时间的常见操作的抽象。

07. sys/wait.h——处理进程状态和等待

sys/wait.h 用于处理进程的状态和等待相关的操作。它定义了一些常量和函数,使程序能够等待子进程的状态改变、获取子进程的退出状态等。


以下是 sys/wait.h 中一些常见的内容:


1.子进程状态常量:

WIFEXITED(status):检查子进程是否正常退出。

WEXITSTATUS(status):获取子进程的退出状态。

WIFSIGNALED(status):检查子进程是否因信号而终止。

WTERMSIG(status):获取导致子进程终止的信号编号。

WIFSTOPPED(status):检查子进程是否暂停。

WSTOPSIG(status):获取导致子进程暂停的信号编号。

2.等待子进程的状态改变:

wait:等待任意子进程的状态改变。

waitpid:等待指定子进程的状态改变。

sys/wait.h 提供了一些用于处理进程状态和等待子进程的函数和常量,使程序能够控制和监视子进程的执行状态。通过包含 sys/wait.h 头文件,可以在类 Unix 系统上进行与进程状态相关的编程和开发。需要注意的是,sys/wait.h 是与操作系统相关的头文件,在不同的操作系统上可能会有所不同。

它通常与下面的头文件一起使用:

08. pthread.h——POSIX线程编程

pthread.h 用于支持 POSIX 线程(POSIX Threads)编程。它定义了一些数据类型、常量和函数,用于创建、管理和同步多线程程序。


以下是 pthread.h 中一些常见的内容:


1.线程管理函数:

pthread_create:创建一个新线程。

pthread_exit:终止当前线程。

pthread_join:等待指定线程的结束。

pthread_detach:将线程设置为可分离状态,使其在退出时自动释放资源。

2.线程同步函数:

pthread_mutex_init、pthread_mutex_destroy:初始化和销毁互斥锁。

pthread_mutex_lock、pthread_mutex_unlock:对互斥锁进行加锁和解锁操作。

pthread_cond_init、pthread_cond_destroy:初始化和销毁条件变量。

pthread_cond_wait、pthread_cond_signal:等待和通知条件变量的变化。

3.线程属性操作:

pthread_attr_init、pthread_attr_destroy:初始化和销毁线程属性。

pthread_attr_getdetachstate、pthread_attr_setdetachstate:获取和设置线程的分离状态。

4.线程局部存储:

pthread_key_create、pthread_key_delete:创建和删除线程局部存储键。

pthread_setspecific、pthread_getspecific:设置和获取线程局部存储的值。

pthread.h 提供了一些用于多线程编程的函数和常量,使程序能够创建、管理和同步多个并发执行的线程。通过包含 pthread.h 头文件,可以在类 Unix 系统上进行多线程编程和开发。需要注意的是,pthread.h 是与 POSIX 线程编程相关的头文件,在不同的操作系统上可能会有所不同。

09. signal.h——信号处理

signal.h 用于处理信号(Signals)和信号处理器(Signal Handlers)。信号是在计算机系统中用于通知进程发生了某些事件或异常的机制。


以下是 signal.h 中一些常见的内容:


1.信号处理函数:

signal:设置信号处理器(Signal Handler)。

raise:向当前进程发送指定信号。

2.信号常量:

SIGINT、SIGTERM、SIGQUIT:表示用户发送的中断、终止、退出信号。

SIGSEGV、SIGILL、SIGFPE:表示发生的错误信号,如段错误、非法指令、浮点异常等。

SIGUSR1、SIGUSR2:表示用户自定义的信号。

3.信号处理器的行为:

SIG_DFL:默认的信号处理器。

SIG_IGN:忽略该信号。

通过使用 signal.h 头文件,可以为程序中的特定信号注册信号处理器,并定义对这些信号的处理行为。当程序接收到注册的信号时,信号处理器将被调用,从而可以执行自定义的处理逻辑,比如优雅地关闭程序、处理异常情况等。


信号处理是一个底层的机制,对于复杂的异步事件处理,通常会选择使用更高级的机制,如多线程或异步编程。然而,在某些情况下,信号处理可以提供一种简单有效的方式来处理一些特定类型的事件或异常。


signal.h 头文件定义的信号处理函数和信号常量在标准 C 和 POSIX 标准中是通用的,不仅适用于 Linux,还适用于其他类 Unix 操作系统,例如 macOS、FreeBSD、Solaris 等。


虽然信号处理机制是 POSIX 标准的一部分,但是不同的操作系统可能会有一些差异和特定的信号。因此,需要根据特定的操作系统来确定可用的信号和其对应的常量。


此外,不同的操作系统可能对信号处理器的行为有一些特定规定或扩展。因此,在编写跨平台的代码时,需要谨慎处理信号处理的相关逻辑,并参考各个操作系统的文档以确保代码在不同平台上的正确性和可移植性。


在 Windows 系统中,信号处理的机制与类 Unix 系统有所不同。Windows 平台使用的是事(Event)和消息(Message)机制来处理类似于信号的异步事件和通知。


Windows 提供了一系列与异步事件处理相关的函数和机制,例如 SetEvent、WaitForSingleObject 、MsgWaitForMultipleObjects 等。这些函数可以用于等待和触发事件,并实现类似于信号处理的功能。


相应地,Windows 平台使用不同于 signal.h 的头文件和函数来处理异步事件和通知。例如,Windows API 中的 SetConsoleCtrlHandler 函数可以用于设置控制台的控制事件处理器,以便捕获和处理控制台事件,如 Ctrl+C 或 Ctrl+Break。此外,Windows 程序通常使用消息循环和消息处理函数来处理窗口消息和用户交互事件。


10. dlfcn.h——动态链接库

dlfcn.h 用于动态链接库(Dynamic Linking)的加载和函数调用。它提供了一组函数和数据类型,使程序能够在运行时动态地加载共享库(也称为动态链接库或共享对象)并使用其中的函数。


以下是 dlfcn.h 中一些常见的内容:


1.动态库加载和卸载函数:

dlopen:打开一个动态链接库。

dlclose:关闭一个已打开的动态链接库。

2.符号获取函数:

dlsym:在动态链接库中查找指定名称的符号(函数、变量等)。

3.错误处理函数:

dlerror:获取最近一次动态链接库相关操作的错误信息。


使用 dlfcn.h 头文件可以让程序在运行时加载和使用共享库,动态地调用其中的函数或获取变量的地址。这在需要在程序运行过程中动态加载和使用外部库的情况下非常有用,例如插件系统、动态加载的驱动程序等。


,dlfcn.h 是一个非标准的头文件,它在类 Unix 系统上比较常见,如 Linux、macOS、FreeBSD 等,但在其他操作系统上可能不可用或存在差异。在使用 dlfcn.h 中的函数时,需要注意兼容性和平台特定的差异。





相关文章
|
17天前
|
XML C# 数据格式
掌握了在Windows平台上查看DLL依赖的方法
掌握了在Windows平台上查看DLL依赖的方法
117 4
|
2月前
|
监控 Windows
Windows平台RTSP|RTMP播放器如何实时调节音量
我们在做Windows平台RTSP、RTMP播放器的时候,有这样的技术需求,特别是多路监控的时候,并不是每一路audio都需要播放出来的,所以,这时候,需要有针对音量调节的设计
|
12天前
|
存储 算法 程序员
C语言:库函数
C语言的库函数是预定义的函数,用于执行常见的编程任务,如输入输出、字符串处理、数学运算等。使用库函数可以简化编程工作,提高开发效率。C标准库提供了丰富的函数,满足各种需求。
|
24天前
|
NoSQL Ubuntu Linux
Linux平台安装MongoDB
10月更文挑战第11天
29 5
|
21天前
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
67 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ly~
|
28天前
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
86 4
|
25天前
|
NoSQL Shell MongoDB
Windows 平台安装 MongoDB
10月更文挑战第10天
36 0
Windows 平台安装 MongoDB
|
2月前
|
监控 C# 块存储
Windows平台RTSP|RTMP播放器如何叠加OSD文字
做Windows平台RTSP|RTMP播放器的时候,特别是多路播放场景下,开发者希望可以给每一路RTSP或RTMP流添加个额外的OSD台标,以区分不同的设备信息(比如添加摄像头所在位置),本文主要探讨,如何动态添加OSD台标。
Windows平台RTSP|RTMP播放器如何叠加OSD文字
|
2月前
|
Linux Android开发 iOS开发
Windows平台RTSP|RTMP播放器如何实现实时录像功能
Windows平台RTSP、RTMP播放器实时录像接口设计,实际上,除了Windows平台,我们Linux、Android、iOS平台也是一样的设计,单纯的录像模块,如果做的全面,也不是一两个接口可以搞定的
|
28天前
|
存储 安全 编译器
深入C语言库:字符与字符串函数模拟实现
深入C语言库:字符与字符串函数模拟实现