当前位置: 首页 > news >正文

wordpress怎样建立多站点手机百度账号登录个人中心

wordpress怎样建立多站点,手机百度账号登录个人中心,注册域名去哪个网站好,个人个性网页界面设计sigfillset 函数详解 一、函数概念 sigfillset() 是 POSIX 信号处理中的核心函数,用于初始化并填充一个信号集,使其包含当前系统支持的所有信号。它是操作信号屏蔽字(signal mask)的基础工具,常与 sigprocmask()、sigs…

sigfillset 函数详解

一、函数概念

sigfillset() 是 POSIX 信号处理中的核心函数,用于初始化并填充一个信号集,使其包含当前系统支持的所有信号。它是操作信号屏蔽字(signal mask)的基础工具,常与 sigprocmask()sigsuspend() 等函数配合使用。

关键特性:
  • 初始化信号集:将 sigset_t 类型变量设为包含所有信号
  • 原子操作:保证线程安全
  • 不可阻塞信号:对 SIGKILLSIGSTOP 无效(这两个信号永远不可阻塞)

二、函数原型和头文件

#include <signal.h>int sigfillset(sigset_t *set);
参数:
  • set:指向要填充的信号集的指针
返回值:
  • 成功:返回 0
  • 失败:返回 -1 并设置 errno(通常是 EFAULT,表示无效指针)

三、信号集(sigset_t)详解

信号集是用于表示一组信号的数据类型,本质是位掩码(bitmask)。在 Linux 中通常定义为:

typedef struct {unsigned long sig[_NSIG_WORDS];
} sigset_t;
信号范围:
  • 标准信号:1~31(如 SIGINT=2, SIGSEGV=11
  • 实时信号:32~64(SIGRTMINSIGRTMAX

使用 kill -l 命令可查看系统支持的信号列表


四、使用场景

1. 阻塞所有信号
sigset_t all_signals;
sigfillset(&all_signals);  // 填充所有信号// 设置进程信号屏蔽字
sigprocmask(SIG_SETMASK, &all_signals, NULL);
2. 安全临界区保护
void critical_section() {sigset_t old_set, new_set;// 准备阻塞所有信号sigfillset(&new_set);// 进入临界区前阻塞信号sigprocmask(SIG_SETMASK, &new_set, &old_set);/* 临界区代码(不会被任何信号中断) */// 恢复原始信号屏蔽sigprocmask(SIG_SETMASK, &old_set, NULL);
}
3. 等待特定信号
sigset_t mask, original_mask;
sigfillset(&mask);          // 包含所有信号
sigdelset(&mask, SIGUSR1);  // 删除 SIGUSR1// 阻塞除 SIGUSR1 外的所有信号
sigprocmask(SIG_SETMASK, &mask, &original_mask);// 等待 SIGUSR1 信号
sigsuspend(&mask);// 恢复原始信号屏蔽
sigprocmask(SIG_SETMASK, &original_mask, NULL);

五、完整使用示例

示例:安全信号处理框架
#include <signal.h>
#include <stdio.h>
#include <unistd.h>volatile sig_atomic_t flag = 0;void handler(int sig) {flag = 1;  // 仅设置标志(异步安全)
}int main() {// 配置信号处理struct sigaction sa;sa.sa_handler = handler;sigemptyset(&sa.sa_mask);sa.sa_flags = SA_RESTART;sigaction(SIGINT, &sa, NULL);// 准备信号集sigset_t all_signals, wait_mask;sigfillset(&all_signals);      // 包含所有信号sigemptyset(&wait_mask);       // 空信号集sigaddset(&wait_mask, SIGINT); // 只关注SIGINT// 阻塞除SIGINT外的所有信号sigset_t old_mask;sigprocmask(SIG_SETMASK, &all_signals, &old_mask);sigdelset(&all_signals, SIGINT); // 允许SIGINT传递while(1) {// 安全等待信号(原子操作)sigsuspend(&wait_mask);if(flag) {printf("Processing signal...\n");/* 安全处理逻辑(非异步安全函数放这里) */flag = 0;}}// 恢复原始信号屏蔽(实际不会执行到这里)sigprocmask(SIG_SETMASK, &old_mask, NULL);return 0;
}

六、相关函数对比

函数功能常见使用场景
sigfillset()填充所有信号到信号集初始化全局屏蔽
sigemptyset()清空信号集准备添加特定信号
sigaddset()添加单个信号到信号集自定义屏蔽组合
sigdelset()从信号集删除单个信号允许特定信号通过
sigismember()检查信号是否在集合中信号状态判断
sigprocmask()设置进程信号屏蔽字临界区保护/信号阻塞
sigsuspend()临时替换信号掩码并等待信号原子等待操作

七、重要注意事项

  1. 信号集生命周期

    // 错误!未初始化信号集
    sigset_t set;
    sigprocmask(SIG_SETMASK, &set, NULL); // 未定义行为// 正确:必须显式初始化
    sigset_t set;
    sigfillset(&set); // 或 sigemptyset(&set);
    
  2. 不可阻塞信号

    sigset_t set;
    sigfillset(&set);
    sigprocmask(SIG_SETMASK, &set, NULL);// 以下信号仍能终止进程
    kill(getpid(), SIGKILL); // 始终有效
    kill(getpid(), SIGSTOP); // 始终有效
    
  3. 线程安全

    • 在多线程环境中,使用 pthread_sigmask() 替代 sigprocmask()
    pthread_sigmask(SIG_SETMASK, &set, NULL);
    
  4. sigaction 协作

    struct sigaction sa;
    sa.sa_handler = handler;
    sigfillset(&sa.sa_mask);  // 执行处理函数时阻塞所有其他信号
    sa.sa_flags = 0;
    

八、错误处理

sigset_t signal_set;if (sigfillset(&signal_set) == -1) {perror("sigfillset failed");switch(errno) {case EFAULT:fprintf(stderr, "Invalid memory address\n");break;default:fprintf(stderr, "Unknown error\n");}exit(EXIT_FAILURE);
}

总结

sigfillset() 是 Linux 信号处理的基础构建块:

  1. 核心作用:快速初始化包含所有信号的信号集
  2. 典型应用
    • 创建全局信号屏蔽
    • 实现安全临界区
    • 配合 sigsuspend() 实现原子等待
  3. 最佳实践
    • 总是显式初始化信号集
    • 结合 sigdelset() 实现精细控制
    • 在多线程程序中使用线程安全版本

掌握 sigfillset() 及其相关函数,是编写健壮的信号处理代码的关键一步。通过合理控制信号屏蔽,可以有效防止信号竞争条件和不可预知的中断行为。

http://www.dtcms.com/a/603273.html

相关文章:

  • 2025-11-12[第三大的数、将x减到0的最小操作数]
  • 基层建设刊物网站建筑工程网签备案合同
  • 强化学习基础概念与核心算法全解析
  • 解释型与编译型编程语言的区别 | 深入了解两者的工作原理与优劣
  • 人工智能网站应怎么做长春市长春网站建设哪家好
  • 建宣传网站北京营销策划公司有哪些
  • 网站系统开发毕业设计网站建设ppt百度文库
  • 2.2 前向传播与反向传播:深度学习的核心机制全解析
  • 山东省建设厅官方网站怎么样如何创建网站?
  • UrealEngine-5.2.1源码-AbilitySystemComponent.h
  • FPGA教程系列-Vivado中FIFO的简单仿真分析
  • 网站开发需要什么工具公司介绍怎么写范本
  • 网站建设责任书广东省建设厅官方网站网址
  • WebView 远程调试全指南,跨端真机调试的完整解决方案
  • wordpress企业网站 教程wordpress站点标题
  • 网站建设的职责dedecms 金融类网站模板
  • STM32的电子钟功能实现
  • 安徽网站建设微信开发注册公司官网入口
  • 网页设计与网站开发教程做网站图片链接到天猫
  • 太阳光模拟器太空环境应用:光学载荷的杂散光性能测试
  • 公司创建一个网站需要多少钱外贸网络营销服务
  • 建设英文外贸网站网站开发的环境
  • 免费空间建站网站推荐网站建设管理维护责任书格式
  • 淘宝客一定要建立网站中国机械加工网怎么样
  • 基于Java的心理压力检测系统【附源码】
  • wordpress电影站主题百度网网页版登录
  • 在Scrapy中如何处理API分页及增量爬取
  • 金坛企业网站建设公司wordpress 保持空格
  • MATLAB实现DLT645协议
  • godaddy做网站百度快速收录方法