2014-02-13 3 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 для Error NO ENTry, который находится в errno.

От man warn(3):

ERR(), VERR(), предупреждают(), и vwarn() функции: добавление сообщение об ошибке, полученное от strerror (3) на основе глобальной переменной егто, которому предшествует другой двоеточие и пространство, если аргумент fmt не равен NULL.

0

Ошибка возникает из функции stat и сообщается как часть функции предупреждения. Более подробно, из документации предостеречь:

Кнопка Fn заблуждается и Fn предупредит семейство функций отображения отформатированного ошибка сообщение на стандартный вывод ошибок. Во всех случаях последний компонент имени программы, символ двоеточия и пробел: . Если аргумент Fa fmt не равен NULL, выводится сообщение об ошибке printf (3) -like . Выход завершается символом новой строки .

Кнопка Fn ERR, Fn, VERR, Fn, предупреждают, и функции vwarn Fn добавить сообщение ошибки, полученный из strerror (3) на основе кода или глобальной переменной егто предшествует другой толстой кишке и пространстве, если только Fa FMT аргумент NULL введите код здесь

Так что «Нет такого файла или каталога» происходит из операции stat, потому что он не может найти имя носка и передается в функцию предупреждения через код.

Смежные вопросы