Может ли readlink возвращать 0 с ненулевым размером буфера?

#c

#c

Вопрос:

Я пытаюсь проанализировать некоторый код (не написанный мной), который вызывает readlink положительный bufsize результат, а затем проверяет, равен ли результат нулю. Я не вижу, как результат может быть нулевым, со всем, что я пробовал, это либо -1, размер реальной ссылки, либо размер программной ссылки.

Может ли результат быть нулевым, и если да, то как?

Ответ №1:

Согласно спецификации

После успешного завершения readlink() вернет количество байтов, помещенных в буфер. В противном случае он должен вернуть значение -1, оставить буфер неизменным и установить errno для указания ошибки

Здесь два возможных ответа

  1. весьма возможно, что вы обнаружили ошибку в реализации (автор не знал о спецификации)
  2. автор кода на практике обнаружил, что платформа не соответствует спецификации и возвращает 0 вместо -1, и написал этот непереносимый фрагмент кода

Ответ №2:

В описании POSIX readlink() говорится:

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
После успешного завершения readlink() вернет количество байтов, помещенных в буфер. В противном случае он должен вернуть значение -1, оставить буфер неизменным и установить errno для указания ошибки.

Поскольку пустая строка не является допустимым именем файла, я не вижу никакого способа, чтобы возвращаемое значение было равно нулю, если bufsize оно больше 0.

Комментарии:

1. Именно так я и думал, спасибо. Просто хотел проверить, есть ли что-то особенное или определенная реализация, не упомянутая на справочных страницах. Я приму ответ, если в ближайшее время никто не ответит по-другому.