在信号处理函数中调用非可重入函数getpwnam
来源:互联网 发布:勇敢一点 薛之谦 知乎 编辑:程序博客网 时间:2024/05/19 02:03
因为main函数和信号处理函数中都调用getpwnam函数,而在getpwnam函数中会调用malloc和free,如果主函数malloc之后收到SIGALRM信号进入信号处理函数,在信号处理函数里malloc然后free,而在信号处理函数调用free和main函数也在调用free时,malloc和free维护的数据结构就出现了损坏。
所以在信号处理函数中调用非可重入函数,则其结果是不可预知的。
#include "apue.h"#include <pwd.h>#include "error.h"static void my_alarm(int signo){ struct passwd *rootptr; printf("in signal handler\n"); if ((rootptr = getpwnam("root")) == NULL) { err_sys("getpwnam(root) error"); } alarm(1);}int main(void){ struct passwd *ptr; signal(SIGALRM, my_alarm); alarm(1); for ( ; ; ) { if ((ptr = getpwnam("sebastien")) == NULL) { err_sys("getpwnam error"); } if (strcmp(ptr->pw_name, "sebastien") != 0) { printf("return value corrupted!, pw_name = %s\n", ptr->pw_name); } }}
0 0
- 在信号处理函数中调用非可重入函数getpwnam
- 10_5 在信号处理函数中调用非可重入函数getpwnam。
- 信号处理程序中调用不可重入函数getpwnam 起结果是不可预见的。
- getpwnam函数学习
- getpwnam函数学习
- C中信号处理函数
- apue第三版 在信号处理程序中调用不可再入函数 的例子遇到的问题
- 信号处理函数
- 信号处理相关函数
- 信号处理函数 signal
- 信号处理函数
- 信号处理相关函数
- 信号处理函数sigaction()
- 信号处理函数
- linux信号处理函数
- Linux信号处理函数
- 信号处理函数
- 不可重入函数getpwnam的问题
- 初次接触分块思想
- 删除windows下过长路径的目录
- 一个简易的具有点击方法的UIImageView的封装
- 让那些白骨,别忘了回家
- Android四大基本组件介绍与生命周期
- 在信号处理函数中调用非可重入函数getpwnam
- 避免缓冲区溢出攻击的方法
- gradle DSL method not found: android()
- found pre-existing rpmdb problem
- 关于WindowsAPI常数的值
- 2016.01.20回顾
- XAudio2学习二之获取输出设备数
- postgress 按月分表存储
- asp.net WebForm 事件响应模型