sprintf 的信号安全功能

问题描述 投票:0回答:2

因此,我正在跟踪信号处理程序被调用的次数。但是,当我尝试打印数字时,我无法使用 printf(),因为它不是信号安全的。因此,我决定使用 sprintf 将 int 转换为字符串。然而,这也不是信号安全的。那么,有什么替代方法可以做到这一点呢?

c linux signals
2个回答
0
投票

您可以使用线程安全的 write() 。 当 write 的文件描述符等于 1 (STDOUT_FILENO) 时,它用于 stdout。 如果你想在 write 中打印一个整数(以信号安全的方式) 您可以编写自己的代码来将整数转换为十进制字符串。 只是一个简单的循环,使用 %10 和 /10 去掉最后一位数字并将它们存储到一个短数组中。


0
投票

有信号安全的

sprintf
实现,例如 stb_sprintf.h
stb_sprintf.h
是纯 C 代码,没有任何 stdlib 依赖项或全局状态。

此外,来自

musl
sprintf 实现似乎是信号安全的 AFAIK。

glibc
实现可能会调用
malloc
,这显然不是信号安全的。

© www.soinside.com 2019 - 2024. All rights reserved.