2014-02-13 77 views
0

我有一个叫涓流方案,将发出警告,并在其源代码有:此错误消息来自哪里?

if (stat(sockname, &sb) == -1 && 
    (errno == EACCES || errno == ENOENT)) 
    warn("Could not reach trickled, working independently"); 

但我得到的消息是:

trickle: Could not reach trickled, working independently: No such file or directory 

哪里这个No such file or directory从何而来?

+0

这将是非常有用的知道什么是在您发布的3行代码之前和之后。可能是由'warn'函数打印的。 –

+1

@devnull这是一个功能,它认为它是系统之一。它实际上使用'strerror(errno)'打印错误消息。 – jcubic

回答

0

该消息来自您的if (..)比较的第二部分。

代码执行了一个stat()系统调用,在sockname上。 然而,统计()返回ENOENT,转化为“没有这样的文件或目录”

你需要了解如何sockname构造,看它是否应该有 一直有效。

4

我认为,当你得到一个errno库存的错误值时,函数warn可以用它作为精度。

在这种特殊情况下,我敢打赌这是ENOENT的错误没有ENTRY是在errno。

man warn(3)

的ERR(),VERR(),警告(),和VWARN()函数追加(3)基于所述全局变量错误从字符串错误得到的错误消息,通过前面另一个冒号和空格,除非fmt参数为NULL。

0

错误来自stat函数,并作为warn函数的一部分进行报告。更详细地,从警告文档:

的FN ERR和Fn警告函数系列显示在标准错误输出格式化的错误 消息。在所有情况下,程序名称的最后一个 组件,冒号字符和空格都是 输出。如果Fa fmt参数不是NULL,则输出格式错误消息printf(3) 。输出由换行符 终止。

ERR,(3)基于所述的FN FN VERR,FN警告,和Fn VWARN功能追加从字符串错误得到的 错误消息上的代码或由另一结肠和空间除非法FMT 之前全局 变量errno参数为NULL输入代码在这里

因此,“没有这样的文件或目录”从统计操作来,因为它无法找到sockname并正在通过代码传递给警告功能。