当然,C 语言标准库还包括一些其他不太常见但非常有用的库和功能,以下是一些额外的标准库和它们的主要特性:
<time.h>
—— 时间和日期库<time.h>
提供了处理时间和日期的功能,包括获取当前时间、格式化时间、计算时间差等。
time_t time(time_t *t)
:获取当前时间。struct tm *localtime(const time_t *timep)
:将 time_t
转换为本地时间。char *asctime(const struct tm *tm)
:将 tm
结构体格式化为字符串。double difftime(time_t end, time_t beginning)
:计算两个时间点之间的差值。#include <stdio.h>
#include <time.h>
int main() {
time_t t = time(NULL); // 获取当前时间
struct tm *tm_info = localtime(&t); // 转换为本地时间
char buffer[26];
strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", tm_info); // 格式化时间
printf("当前时间: %s\n", buffer);
return 0;
}
<signal.h>
—— 信号处理库<signal.h>
用于处理程序中的信号,允许程序响应来自操作系统或其他进程的信号。
void (*signal(int signum, void (*handler)(int)))(int)
:设置信号处理函数。int raise(int sig)
:向自身发送信号。#include <stdio.h>
#include <signal.h>
#include <stdlib.h>
void handle_sigint(int sig) {
printf("捕获到 SIGINT 信号 (Ctrl+C)\n");
exit(0);
}
int main() {
signal(SIGINT, handle_sigint); // 设置信号处理函数
while (1) {
printf("程序运行中... (按 Ctrl+C 退出)\n");
sleep(1);
}
return 0;
}
<unistd.h>
—— POSIX 操作系统接口虽然不是 C 标准库的一部分,但在类 UNIX 系统中非常常见,提供了与操作系统进行交互的功能。
pid_t fork(void)
:创建新进程。int execve(const char *filename, char *const argv[], char *const envp[])
:执行程序。int sleep(unsigned int seconds)
:暂停程序执行指定秒数。#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid = fork(); // 创建新进程
if (pid == 0) {
// 子进程
printf("这是子进程\n");
} else if (pid > 0) {
// 父进程
printf("这是父进程,子进程ID: %d\n", pid);
} else {
// 错误处理
perror("创建进程失败");
}
return 0;
}
<dirent.h>
—— 目录操作库<dirent.h>
提供了在目录中遍历文件的功能。
DIR *opendir(const char *name)
:打开目录。struct dirent *readdir(DIR *dirp)
:读取目录中的下一个条目。int closedir(DIR *dirp)
:关闭目录。#include <stdio.h>
#include <dirent.h>
int main() {
DIR *dir;
struct dirent *entry;
dir = opendir("."); // 打开当前目录
if (dir == NULL) {
perror("无法打开目录");
return 1;
}
while ((entry = readdir(dir)) != NULL) { // 读取目录条目
printf("%s\n", entry->d_name);
}
closedir(dir); // 关闭目录
return 0;
}
<pthread.h>
—— POSIX 线程库虽然不是 C 标准库的一部分,但在多线程编程中非常常用。
pthread_t
:线程标识符类型。int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void *), void *arg)
:创建新线程。void pthread_exit(void *retval)
:终止线程。#include <stdio.h>
#include <pthread.h>
void *thread_function(void *arg) {
printf("线程执行中...\n");
return NULL;
}
int main() {
pthread_t thread;
pthread_create(&thread, NULL, thread_function, NULL); // 创建线程
pthread_join(thread, NULL); // 等待线程结束
printf("主线程结束\n");
return 0;
}
<math.h>
—— 数学库虽然已经提过,但值得再提的是 <math.h>
包含了丰富的数学函数,适合各种计算需求。
double sin(double x)
、double cos(double x)
:三角函数。double sqrt(double x)
:平方根。double pow(double base, double exp)
:幂运算。double exp(double x)
、double log(double x)
:指数和对数函数。#include <stdio.h>
#include <math.h>
int main() {
double value = 9.0;
printf("平方根: %.2f\n", sqrt(value));
printf("2 的 3 次方: %.2f\n", pow(2.0, 3.0));
return 0;
}
这些库和功能补充了 C 语言的标准库,提供了更多的工具和选项来应对不同的编程需求。掌握这些库可以使你在开发中更加灵活和高效。