GNU sistemi 
sembolik bağları destekler. Bu aslında bir dosya ismine gösterici olan bir dosya çeşididir. Sabit bağların tersine, dizinlere ve diğer sosya sistemlerindeki dosyalara ve dizinlere sembolik bağlar yapılabilir. Ayrıca, olmayan bir dosyaya da bir sembolik bağ yapılabilir.  Tersine sembolik bağın hedefindeki dosyanın silinmesi sembolik bağı sadece geçersiz hale getirir. Hedef dosya oluşturulana kadar bağ dosyası başarısız olarak kalır.
   
 
Sembolik bağların tercih edilmesinin bir başka sebebi de bağı açmaya çalıştığınızda bazı özel şeylerin yapılmasıdır. open işlevine dosya ismi olarak bir sembolik bağ ismi vererek bir bağı açmaya çalışırsanız, bağın içerdiği dosya ismini okur ve onun yerine bu dosyayı açar. stat işlevi ise tersine sembolik bağın kendisi ile değil, gösterdiği dosya ile çalışır.
   
Ayrıca, dosya silme ve isim değiştirme gibi bazı işlemler bağın kendisi üzerinde yapılır. readlink ve lstat işlevleri ayrıca sembolik bağları izlemekten kaçınır, çünkü onların amacı bağ hakkında bilgi sağlamaktır. Sabit bağ yapan link işlevi sembolik bağlara da sabit bağ yapar.
   
Bazı sistemlerde, dosyalarla çalışan bazı işlevlerin bir dosya yolu çözümlenirken kaç tane sembolik bağın izleneceğine ilişkin bir sınırlama vardır. Bu sınır sistemde eğer varsa sys/param.h başlık dosyasında tanımlıdır.
   
- 
MAXSYMLINKS makrosu bazı işlevlerin ELOOP değerini döndürmeden kaç tane sembolik bağ izleyebileceğini belirtir. Tüm işlevler böyle davranmaz ve bu değer sysconf işlevinin _SC_SYMLOOP için döndürdüğü değerle aynı değildir. Aslında, sysconf böyle bir sınır olmadığını belirten bir değer döndürür.
 
Bu bölümdeki işlevlerin çoğu  
unistd.h başlık dosyasında bildirilmiştir.
   | int symlink | (const char *eski-isim,
 const char *yeni-isim) | 
işlev
- 
symlink işlevi eski-isim isimli dosyaya yeni-isim isimli bir sembolik bağ yapar.
    - 
İşlev başarılı olduğunda  0- , aksi takdirde  -1-  ile döner.  Dosya ismi hatalarına-  ek olarak aşağıdaki  errno-  hata durumları bu işlev için tanımlanmıştır:
    
- EEXIST
- 
yeni-isim isminde bir dosya zaten var.
       
- EROFS
- 
Yeni bağı içerecek dizine dosya sistemi salt-okunur bağlı olduğundan yazılamıyor.
       
- ENOSPC
- 
Yeni bağı içerecek dizin ya da dosya sisteminde yer yok ve genişletilemiyor.
       
- EIO
- 
Diske okuma ya da yazma denemesi sırasında bir donanım hatası oluştu.
       
 
| int readlink | (const char *dosyaismi,
 char       *tampon,
 size_t      boyut) | 
işlev
- 
readlink işlevi sembolik bağın ismini dosyaismi ile alır ve sembolik bağın hedefindeki dosyanın ismini *tampon'a yerleştirir.  Dosya ismi dizgesi boş karakter sonlandırmalı değildir; işlev tampon ile gösterilen dizgeye yerleştirilen karakterlerin sayısı ile döner, dolayısıyla boyut argümanı en azından bu değerde olmalıdır.
    - 
Eğer işlev boyut değerine eşit bir değerle dönmüşse, dosya ismi için yeterli yerin olup olmadığı hakkında bir fikir vermez. Bu durumda tamponu büyütüp tekrar denemelisiniz. Bir örnek:
    - char *
readlink_malloc (const char *filename)
{
  int size = 100;
  char *buffer = NULL;
  while (1)
    {
      buffer = (char *) xrealloc (buffer, size);
      int nchars = readlink (filename, buffer, size);
      if (nchars < 0)
        {
          free (buffer);
          return NULL;
        }
      if (nchars < size)
        return buffer;
      size *= 2;
    }
}
- 
İşlevin dönüş değeri  -1-  ise bir hata oluşmuş demektir. Dosya ismi hatalarına-  ek olarak aşağıdaki  errno-  hata durumları bu işlev için tanımlanmıştır:
    
- EINVAL
- 
İsmi belirtilen dosya bir sembolik bağ değil.
       
- EIO
- 
Diske okuma ya da yazma denemesi sırasında bir donanım hatası oluştu.
       
 
Bazı durumlarda sembolik bağların hedefindeki gerçek dosya isminin başka hiçbir sembolik bağ, önek ve dosya yolunda . veya .. olmaksızın çözümlenmesi istenebilir. Bu isteğe bir örnek, aynı dosya düğümüne erişen farklı dosya isimlerinin karşılaştırılmasıdır.
   
| char *canonicalize_file_name | (const char *isim) | 
işlev
- 
canonicalize_file_name işlevi isim ile belirtilen dosya isminin  ne ., .. elemanları ne herhangi bir dosya yolu ayracı (/) ne de sembolik bağ içeren mutlak ismini döndürür. İşlev dönüş değerini malloc ile ayrılmış bellek bloğunda döndürür. Eğer dönen sonuç artık kullanılmayacaksa free çağrısı ile serbest bırakılmalıdır.
    - 
Bir dosya yolu elemanı yoksa işlev bir boş gösterici ile döner. Bu ayrıca, dosya yolunun uzunluğu PATH_MAX karakteri aşarsa da döndürülür. Her durumda errno değişkenine hata durumu atanır.
    - ENAMETOOLONG
- 
Sonuçlanan dosya yolu çok uzun. Bu hata dosya isimlerinde uzunluk sınırı olan dosya sistemlerinde oluşur.
       
- EACCES
- 
Dosya yolunu oluşturan elemanlardan en az biri okunamıyor.
       
- ENOENT
- 
Girdi dosya ismi boş.
       
- ENOENT
- 
Dosya yolunu oluşturan elemanlardan en az biri mevcut değil.
       
- ELOOP
- 
MAXSYMLINKS'den fazla sembolik bağ izlendi.
       
 
- 
Bu işlev bir GNU oluşumudur ve stdlib.h başlık dosyasında bildirilmiştir.
 
Unix standardı canonicalize_file_name işlevinin bir benzeri olarak sonucun yerleştirileceği tamponu kullanıcının belirteceği bir işlev tanımlamıştır.
   
| char *realpath | (const char *restrict isim,
 char *restrict       sonuç) | 
işlev
- 
realpath işlevi sonuç parametresinde boş gösterici belirtildiğinde tamamen canonicalize_file_name gibi davranır.  İşlev bir tampon ayırır ve ona bir gösterici ile döner. Eğer sonuç NULL değilse, sonuç onun gösterdiği tampona kopyalanır. Çağrıcıya yanıtı yeterince büyük bir tampon ayırmaktır. PATH_MAX'ın tanımlı olduğu sistemlerde tampon bu uzunlukta olmalıdır. Dosya yolu uzunluğu için bir sınırlama bulunmayan sistemlerde uzunluk tahmin edilemeyeceğinden realpath işlevi ikinci parameresinde NULL dışında bir değer belirterek çağrılmamalıdır.
    - 
Bir diğer fark da, işlev NULL ile döndüğünde sonuç tamponunun (sıfırdan farklıysa) mevcut olmayan ya da okunamayan dosya yolu parçaları içereceğidir. Bu durumda errno değişkenine EACCES ya da ENOENT atanır.
    - 
Bu işlev stdlib.h dosyasında bildirilmiştir.
 
Bu işlevi kullanmanın bir faydası da geniş çapta kullanım alanı olmasıdır. Sakıncası ise uzun dosya isimleri için sınırlama olmayan sistemlerde uzun dosya yolu başarısızlıkları raporlamasıdır.