【发布时间】:2012-01-10 16:05:30
【问题描述】:
假设我正在调用 write() 并返回错误 -8。如何检查这代表哪个记录的错误返回值?
【问题讨论】:
标签: c linux error-handling
假设我正在调用 write() 并返回错误 -8。如何检查这代表哪个记录的错误返回值?
【问题讨论】:
标签: c linux error-handling
你通常会使用
man functionname
或许
man -S2 functionname # specify other section (2, 3, 5, 7)
大多数函数在成功时返回 0,在失败时返回非空值,说明它们还设置了 errno。可以得到errno的含义全局变量1
errno.h
strerror 函数 (#include <string.h>)或使用方便的助手perror,它会根据strerror 和给定的前缀打印错误消息:
perror("oops, popen failed with: ");
1 好吧,从技术上讲,它不需要是全局变量。根据您的操作系统/库,它可能是宏、线程局部变量等...
【讨论】:
/usr/include/asm-generic/errno.h和/usr/include/asm-generic/errno-base.h——当然是errno.h拖进来的。
perror 值得一提,但它不仅仅是检查和发现:)
perror 添加了冒号。如果您像这样在参数中放入一个,那么实际输出中将有两个。 oops, popen failed with: :SOME_ERROR
查看strerror 联机帮助页。 (注意,虽然write() 应该只返回最坏的-1 和errno 中的错误代码)。
【讨论】:
正式它不是返回-8,而是一个错误代码。这些错误代码可以在手册中找到(例如这里:http://linux.die.net/man/2/write),您应该使用这些代码来验证一切是否正常。
所以,你会使用:
write(..);
if( errno == EFAULT ) { ...}
【讨论】:
你不应该打印返回值本身,而是strerror(return_value)。您也可以查看man errno 了解错误描述。
【讨论】: