readlink()

Поместить содержимое символьной ссылки в буфер

Прототип:

#include <unistd.h>
int readlink( const char *path,
char *buf,
size_t bufsiz );

Аргументы:

path
Имя символьной ссылки.
buf
Указатель на буфер, в котором функция может хранить содержимое символической ссылки (т.е. путь, на который указывает ссылка).
bufsiz
Размер буфера.

Библиотека:

libc

Описание:

Функция readlink() помещает содержимое символьной ссылки с именем path в буфер, на который указывает buf, размер которого равен bufsiz. Содержимое возвращенной символической ссылки не включает терминатор NULL. Длина содержимого должна определяться из структуры struct stat, возвращаемой lstat(), или значением 3 из вызова readlink().

При успешном завершении readlink(), до bufsiz байт из содержимого символической ссылки помещается в buf.

Возвращаемое значение:

Количество байт, помещенных в буфер.

Если возникла ошибка функция возвращает -1, код ошибки записывается в errno.

Коды ошибок:

EACCES
Для компонента префикса path отказано в разрешении на поиск.
EINVAL
Указанный файл не является символической ссылкой.
ELOOP
Обнаружен цикл в символических ссылках, встреченных во время разрешения аргумента path, и было обнаружено более чем SYMLOOP_MAX символических ссылок.
ENAMETOOLONG
Компонент path превысил NAME_MAX символов, или целый путь превысил PATH_MAX символов.
ENOENT
Указанный файл не существует.
ENOSYS
Ссылки не поддерживаются менеджером ресурсов, связанным с path.
ENOTDIR
Компонент префикса path не является каталогом.

Примеры:

/*
* Read the contents of the named symbolic links
*/
#include <limits.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
char buf[PATH_MAX + 1];
int main( int argc, char** argv )
{
int n;
int len;
int ecode = 0;
for ( n = 1; n < argc; ++n )
{
if ( (len = readlink( argv[n], buf, PATH_MAX )) == -1 )
{
perror( argv[n] );
ecode++;
} else {
buf[len] = '\0';
printf( "%s -> %s\n", argv[n], buf );
}
}
return (ecode);
}

Классификация:

POSIX 1003.1

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

errno, struct stat, lstat(), symlink()




Предыдущий раздел: Описание API системной библиотеки