【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 中的函数时,需要注意兼容性和平台特定的差异。





相关文章
|
2月前
|
Ubuntu Linux 编译器
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
【Linux】详解动静态库的制作和使用&&动静态库在系统中的配置步骤
|
1月前
|
Linux 开发工具
Linux技术资源分享:探索Linux软件包的宝藏:沙皇下载平台体验
Linux技术资源分享:探索Linux软件包的宝藏:沙皇下载平台体验
17 3
|
12天前
|
Linux 编译器 vr&ar
【Linux】静态库和动态库
本文详细介绍了Linux系统中静态库和动态库的概念、区别、制作与使用方法,包括它们在链接时的区别、加载机制以及优缺点。
8 0
|
1月前
|
Linux vr&ar 开发者
Linux 命令 `ar` 详解:静态库的管理利器
`ar` 命令是 Linux 管理静态库的工具,常用于创建、修改和提取 `.a` 文件。基本语法为 `ar [选项] 目标文件 [成员...]`。常用选项包括:`rcs` 创建(更新)静态库,`t` 列出成员,`x` 提取成员,`d` 删除成员。注意文件顺序、创建索引、备份和跨平台兼容性。学习和掌握 `ar` 命令能提升系统开发效率。
|
25天前
|
Linux 数据处理 vr&ar
Linux下的ranlib命令:静态库文件的索引生成器
`ranlib`是Linux用于加速静态库(.a文件)链接的工具,它生成索引以优化查找目标文件。当链接器处理静态库时,索引能快速定位目标,提升效率。命令如`ranlib libexample.a`创建索引。注意,新工具链可能已自动包含此功能,使用前应确保库文件未含索引,避免重复生成。
|
2月前
|
Linux vr&ar C语言
|
1月前
|
Windows 计算机视觉 Linux
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
该文档介绍了Qt的跨平台特性,并推荐在Windows和Linux开发中使用QtCreator。在Windows下添加动态库,可以通过Visual Studio配置.lib文件和.dll文件,或在QtCreator中使用"添加库"功能。在QtCreator中,选择库文件、包含路径,并配置Details,然后更新.pro文件,清除、qmake及构建项目。运行时确保.dll与.exe在同一目录下。
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
|
2月前
|
Linux 开发工具 计算机视觉
QtCreator 跨平台开发添加动态库教程(以OpenCV库举例)- Windows篇
Qt是跨平台的开发工具,推荐使用QtCreator进行Windows和Linux开发。在Windows下,使用Visual Studio创建动态库时,需要配置.lib文件并确保运行时.dll与.exe在同一目录。在QtCreator中添加DLL动态库,可以通过右键项目,选择添加库,然后在Details界面配置库文件、包含路径和平台,最后更新PRO文件并进行清除、qmake和构建步骤。运行时同样需确保.dll文件与可执行文件在同一目录。
|
1月前
|
Linux API C语言
C语言读写BMP文件-EasyBmp【 linux 平台】
**EasyBmp** 是一个49KB的轻量级C++图像处理库,专注于BMP格式,提供简单易用的API。它的特点是小巧、开源、易于理解和高度定制。通过示例代码展示了如何轻松读取、缩放和保存BMP图像。适合需要高效处理BMP图像的开发者。
|
1月前
|
Linux C++
linux C/C++静态库制作
linux C/C++静态库制作

热门文章

最新文章