#c
#c
Вопрос:
Я пытаюсь проанализировать некоторый код (не написанный мной), который вызывает readlink
положительный bufsize
результат, а затем проверяет, равен ли результат нулю. Я не вижу, как результат может быть нулевым, со всем, что я пробовал, это либо -1, размер реальной ссылки, либо размер программной ссылки.
Может ли результат быть нулевым, и если да, то как?
Ответ №1:
Согласно спецификации
После успешного завершения readlink() вернет количество байтов, помещенных в буфер. В противном случае он должен вернуть значение -1, оставить буфер неизменным и установить errno для указания ошибки
Здесь два возможных ответа
- весьма возможно, что вы обнаружили ошибку в реализации (автор не знал о спецификации)
- автор кода на практике обнаружил, что платформа не соответствует спецификации и возвращает 0 вместо -1, и написал этот непереносимый фрагмент кода
Ответ №2:
В описании POSIX readlink()
говорится:
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
После успешного завершения readlink() вернет количество байтов, помещенных в буфер. В противном случае он должен вернуть значение -1, оставить буфер неизменным и установить errno для указания ошибки.
Поскольку пустая строка не является допустимым именем файла, я не вижу никакого способа, чтобы возвращаемое значение было равно нулю, если bufsize
оно больше 0.
Комментарии:
1. Именно так я и думал, спасибо. Просто хотел проверить, есть ли что-то особенное или определенная реализация, не упомянутая на справочных страницах. Я приму ответ, если в ближайшее время никто не ответит по-другому.