阅读手册页和一些代码并没有真正帮助我
理解 - 或者更好的是,我应该使用 - perror("...")
或 fprintf(stderr, "...")
之间的区别。
最佳答案
调用 perror
将为您提供 errno
的解释值,这是由 POSIX 系统调用写入的线程局部错误值(即,每个线程都有自己的值对于 errno
)。例如,如果您调用了 open()
,并且产生了一个错误(即它返回了 -1
),那么您可以调用 perror
之后立即查看实际错误是什么。请记住,如果您同时调用其他系统调用,那么 errno
中的值将被覆盖,并且调用 perror
对诊断您的系统没有任何用处如果错误是由较早的系统调用生成的,则发出问题。
fprintf(stderr, ...)
另一方面可用于打印您自己的自定义错误消息。通过打印到 stderr
,您可以避免将错误报告输出与应该发送到 stdout
的“正常”输出混合在一起。
请记住 fprintf(stderr, "%s\n", strerror(errno))
类似于 perror(NULL)
因为调用了 strerror(errno)
将为 errno
生成打印的字符串值,然后您可以通过 fprintf
将其与任何其他自定义错误消息组合。
关于c - 我什么时候应该使用 perror ("...") 和 fprintf(stderr, "...")?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12102332/