Функция rename () C не работает в файловых системах. Таким образом, я могу перемещать файлы через копию, открывая их, читая их и записывая в новую копию, а затем отменяя связь. Но мне трудно заставить это работать с символическими ссылками. (Идея состоит в том, чтобы переместить папку с кучей других файлов / папок / символических ссылок и т.д. внутри нее). В основном реализация команды mv в C.
open(file, O_RDONLY)
while ((c = read(source_descriptor, buf, SIZE)) > 0){
write(d, buf, c);
}
unlink file;
Работает хорошо для обычных файлов (и у меня есть другая функция, обрабатывающая каталоги без проблем). Но всякий раз, когда он попадает по символической ссылке, я получаю perror выплевывая Нет такого файла или каталога .
Я могу определить, является ли это символической ссылкой через d_type , но я не уверен, как читать / копировать его, когда он у меня есть, так как обычное копирование файла не работает с символическими ссылками, потому что open () отказывается открывать им.