危险函数与常用函数

危险函数

gets(s)
gets() 函数从标准输入读取一行字符,直到遇到换行符(\n)或文件结束符(EOF)。换行符不会被存储在目标字符串中,而是被替换为 null 终止符(\0)。
puts(const char s)*
持续输出s指向的字符 直到遇到终止符\0


1
char *strncpy(char *dest, const char *src, size_t n);
  • dest 目标字符串的指针
  • src 源字符串的指针
  • n 要复制的最大字符数

安全的,n限制了最大字符数


1
2
3
#include <unistd.h>

unsigned int alarm(unsigned int seconds);

seconds:​指定在多少秒后发送 SIGALRM 信号。如果设置为 0,则取消之前设置的闹钟。

实现定时触发函数的功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <unistd.h>
#include <signal.h>

// 信号处理函数
void handle_sigalrm(int sig) {
printf("收到信号 %d:闹钟触发\n", sig);
}

int main() {
// 设置 SIGALRM 信号的处理函数
signal(SIGALRM, handle_sigalrm);

// 设置闹钟,在 5 秒后触发 SIGALRM 信号
alarm(5);
printf("闹钟设置为 5 秒后触发\n");

// 无限循环,等待信号
while (1) {
printf("程序运行中...\n");
sleep(1);
}

return 0;
}

输出:

1
2
3
4
5
6
7
8
9
10
闹钟设置为 5 秒后触发
程序运行中...
程序运行中...
程序运行中...
程序运行中...
程序运行中...
收到信号 14:闹钟触发
程序运行中...
...

注意事项:
- 一个进程同时只能有一个闹钟定时器。如果在之前的闹钟尚未触发时再次调用 alarm,新的定时将覆盖之前的设置。​菜鸟教程+6nocbtm’s Blog+6博客园+6
- 要取消已设置的闹钟,可以调用 alarm(0)。​nocbtm’s Blog+2旧时光文档+2博客园+2
- SIGALRM 信号的默认行为是终止进程,因此通常需要自定义信号处理函数来定义触发后的操作。

1
2
3
#include <dlfcn.h>

void *dlopen(const char *filename, int flag);

字符串操作类

1
char *strstr(const char *haystack, const char *needle);

返回指向主字符串中第一次出现子字符串的位置的指针

1
char *strchr(const char *haystack, int c);

返回指向主字符串中第一次出现某个字符的位置的指针

1
int snprintf(char *str, size_t size, const char *format, ...);
  • str:目标缓冲区,格式化后的字符串将存储在这里。
  • size:目标缓冲区的最大长度(包括字符串结束符 \0)。
  • format:格式化字符串,用于指定输出的格式。
  • ...:可选参数,根据 format 的内容提供相应的值。
    snprintf() 是 C 标准库中的一个安全的字符串格式化函数,用于将格式化的数据写入缓冲区,同时限制输出的长度以防止缓冲区溢出。它的功能类似于 printf(),但更加安全,因为它要求指定缓冲区的最大长度。
    1
    size_t strlen(const char *str);
    strlen() 是 C 标准库中的一个函数,用于计算字符串的长度。它返回字符串中字符的个数,不包括字符串结束符 \0

文件类

1
FILE *fopen(const char *filename, const char *mode);
  • filename:要打开的文件名(路径)。
  • mode:文件打开模式,常见的模式有:
    • "r":只读模式,文件必须存在。
    • "w":写入模式,如果文件存在则清空,如果不存在则创建。
    • "a":追加模式,写入内容会添加到文件末尾。
    • "rb""wb""ab":二进制模式(用于读取或写入二进制文件)。
    • "r+""w+""a+":读写模式。
1
int fclose(FILE *stream);

stream:文件指针

1
size_t fread(void *ptr, size_t size, size_t count, FILE *stream);
  • ptr:指向存储读取数据的缓冲区的指针。
  • size:每个元素的大小(以字节为单位)。
  • count:要读取的元素数量。
  • stream:文件指针。

read


dlopen()

1
2
3
4
5
6
7
8
9
10
#include <dlfcn.h>

/**
* @brief 在运行时候加载指定的动态库 返回一个句柄
* @param filename 动态库路径 若为null:返回主程序的句柄
* @param flag 控制加载行为的标志
* @return 成功返回动态库的句柄 失败返回null
*/
void *dlopen(const char *filename, int flag);


危险函数与常用函数
http://example.com/2025/03/18/危险函数与常用函数/
作者
yvyvSunlight
发布于
2025年3月18日
许可协议