【发布时间】:2019-02-26 23:39:42
【问题描述】:
我需要在信号处理函数中打印出一个字符串和一个整数。有人告诉我 write 是信号安全的。到目前为止,我已经尝试用 write 打印出一个整数,但它会发出奇怪的符号。 Write 适用于 char 字符数组,但不适用于整数。任何建议将不胜感激。下面是我的代码,它给出了错误。
#include<stdio.h>
#include<wait.h>
#include<signal.h>
#include<unistd.h>
int main()
{
int x[] = {100000};
write(1, x, sizeof(x));
return 0;
}
【问题讨论】:
-
你希望得到什么?
-
如果您不了解数组内容和文件之间的关系,请使用十六进制编辑器查看文件和内存。内存内容不是用 ASCII 编码的(没有努力做到这一点),所以当你将它们直接转储到磁盘时,你不能指望文本表示。
-
我只是将整数打印到控制台。
-
100000 是十六进制的 000186a0。所以字节是00、01、86、a0。如果您的机器是 little-endian,那么它们会显示为 a0、86、01、00。前两个字符是非 ascii。你到底在期待什么?如果您想查看整数的文本表示,则首先需要将其转换为可打印的字符串。
-
write打印原始字节,100000 的原始字节与字符串“100000”的原始字节不同。尽管 write 是异步信号安全的,但它不符合您将整数打印为字符串的其他重要要求。