危险函数与常用函数

危险函数

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);

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