Dosya İsimlerinin Değiştirilmesi
Önceki XIV. Oylum - Dosya Sistemi Arayüzü Sonraki
Dosya İsimlerinin Değiştirilmesi
Bir dosyanın ismini değiştirmek için rename işlevi kullanılır.
int rename
(const char *eski-isim,
 const char *yeni-isim)
işlev
rename işlevi ismi eski-isim ile belirtilen dosyanın ismini yeni-isim yapar. Evvelce eski-isim ile erişilen dosyaya artık yeni-isim ile erişilebilecektir. (Eğer dosyanın başka isimleri de varsa, onlar hala geçerli olacaktır.)
yeni-isim ile belirtilen dosya, eski-isim ile belirtilen dosya ile aynı dosya sisteminde olmalıdır.
rename için özel bir durum, eski-isim ve yeni-isim ile belirtilen isimlerin aynı dosyanın iki ismi olmasıdır (çok isimli dosya). Bu durumda yapılacak tek şey eski-isim ile belirtilen dosya ismini silmektir. Ancak, POSIX bu durumda işlevin hiçbir şey yapmamasını ve başarı raporlamasını gerektirir. Sizin sisteminizin nasıl davranacağını bilemeyiz.
eski-isim bir dizin değilse ve yeni-isim diye bir dosya mevcutsa isim değiştirme işlemi sırasında bu dosya silinir. Bu bakımdan, yeni-isim ile bir dizin belirtilmişse, bu durumda rename başarısız olur.
eski-isim bir dizinse, yeni-isim mevcut olmamalı ya da boş bir dizin ismi olmalıdır. İkinci durumda yeni-isim isimli dizin önce silinecektir. yeni-isim ile ismi değiştirlecek eski-isim isimli dizinin bir alt dizini belirtilmemelidir.
rename işlevinin kullanışlı bir özelliği, eski isim yeni isim ile değiştirilirken, dosyaya önce yeni ismin eklenmesi, sonra eski ismin silinmesi şeklinde değiştirme işleminin atomik yapılmasıdır. Yani, eğer işlem sırasında bir sistem çökmesi yaşanırsa, her iki ismin hala mevcut olması olasıdır.
İş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:
EACCES
Dizinlerden biri yeni-isim'i içeriyor ya da eski-isim yazmaya izin vermiyor; veya yeni-isim ve eski-isim birer dizin ve onlardan birine yazma izniniz yok.
EBUSY
eski-isim veya yeni-isim ile belirtilen dizinlerden biri sistem tarafından kullanılıyor ve sistem bunları isim değişikliğine karşı engelliyor. Bu hata bir dosya sisteminin bağlı olduğu dizin için ve onun dizinleri süreçlerin çalışma dizinlerini içeriyorsa oluşur.
ENOTEMPTY
EEXIST
yeni-isim isimli dizin boş değil. GNU sistemi bu hata için daima ENOTEMPTY döndürür, diğer sistemler EEXIST döndürebilir.
EINVAL
eski-isim, yeni-isim isimli dizini içeriyor.
EISDIR
yeni-isim bir dizin ama eski-isim değil.
EMLINK
yeni-isim'in üst dizini çok fazla bağ (girdi) içerecekti.
ENOENT
eski-isim isimli bir dosya yok.
ENOSPC
yeni-isim'i içerecek dizinde ve dosya sisteminde yer yok.
EROFS
İşlem salt-okunur bağlı bir dosya sisteminde yapılmaya çalışılıyor.
EXDEV
yeni-isim ve eski-isim farklı dosya sistemleri üzerinde.
Önceki Üst Ana Başlık Sonraki
Dosyaların Silinmesi Başlangıç Dizinlerin Oluşturulması
Bir Linux Kitaplığı Sayfası