c - 我什么时候应该使用 perror ("...") 和 fprintf(stderr, "...")?

标签 c stderr

阅读手册页和一些代码并没有真正帮助我 理解 - 或者更好的是,我应该使用 - 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/

相关文章:

c - 以错误的方式定义结构

C程序只有两个循环

c++ - 音频重采样库

Python监控子进程的stderr和stdout

Linux中的C程序: Output Redirection Performance

c - C 中 struct 的指定初始值设定项和复合文字

c - C 中的返回值

macos - Bash 命令替换 stdout+stderr 重定向

python - 将 CGI 错误输出从 STDERR 重定向到文件(python 和 perl)

dos - 如何在出错时退出批处理程序?