Cómo convertir la ruta absoluta a relativa en c linux

Me gustaría saber cómo una ruta absoluta de un enlace simbólico se puede convertir en relativa en función de un directorio determinado (que incluye el archivo vinculado) en lenguaje c en el sistema operativo Linux (Ubuntu).

Pensé en buscar la subcadena de la ruta relativa, pero ¿y si ya existe más arriba en la jerarquía de la carpeta?

quí hay una descripción más específica de lo que quiero hacer: Ruta relativa:

 folder/folder1/folder2

Absolut ruta:

/home/giorgos/Desktop/folder/folder1/folder2/a.pdf

cambiado

/home/giorgos/Desktop/myfolder/folder1/folder2/a.pdf

Obviamente no puedo simplemente buscar y reemplazar "carpeta /", considere este caso:

/home/giorgos/Desktop/folder/folder/folder/folder1/folder2/a.pdf

e puede buscar tanto hacia adelante como hacia atrás y, si se reemplaza, todavía da un resultado incorrecto. Solo si conociera la ruta relativa podría buscar el absoluto hacia atrás y reemplazarlo, entonces la salida sería correcta:

   /home/giorgos/Desktop/folder/myfolder/folder/folder1/folder2/a.pdf

Respuestas a la pregunta(6)

Su respuesta a la pregunta