İlginçtir ki, cevap "Bağlıdır" olabilir.
Açık olmak gerekirse, mv
belirtilen etmek
Yardımcı mv
program, rename()
işleve eşdeğer eylemler gerçekleştirmelidir
Yeniden adlandırma işlevi belirtimi şunları belirtir:
Bu rename()
işlev, normal dosyalar için ISO C standardında tanımlanan işlevle eşdeğerdir. Buraya eklenmesi, bu tanımı dizinlerdeki eylemleri içerecek şekilde genişletir ve yeni parametre zaten var olan bir dosyayı adlandırdığında davranışı belirtir. Bu belirtim, işlevin eyleminin atomik olmasını gerektirir.
Ama son ISO C şartname için rename()
devletler:
7.21.4.2 rename
İşlev
özet
#include <stdio.h>
int rename(const char *old, const char *new);
Açıklama
rename
Fonksiyon Adını tarafından işaret dizedir dosyayı neden old
bundan böyle tarafından işaret dize verilen ad olarak bilinmek new
. Adlı dosyaya old
artık bu adla erişilemiyor. İşlevin new
çağrılmasından önce tarafından işaret edilen dize tarafından adlandırılan bir dosya varsa rename
, davranış uygulama tanımlıdır.
İadeler
rename
İşlevini verir operasyon başarılı olursa sıfır, sıfırdan farklı başarısız olursa, bu durumda dosya daha önce yine de başlangıçtaki adıyla bilinir var olup olmadığını.
Şaşırtıcı bir şekilde, atomisite için açık bir gereklilik olmadığını unutmayın. En son halka açık C Standardında başka bir yerde gerekli olabilir, ancak bulamadım. Herkes böyle bir gereksinim bulabilirse, düzenlemeler ve yorumlar hoş geldiniz daha fazladır.
Ayrıca bkz. Rename () atomik mi?
Başına Linux kılavuz sayfasında :
Eğer newpath
zaten var erişmeye çalıştığı bir başka süreç hangi anlamı yok ki, bu atomik değiştirilir
newpath
eksik bulacaksınız. Ancak, muhtemelen her ikisi de bir penceredir olacak oldpath
ve newpath
dosyaya bakınız değiştiriliyor.
Linux kılavuz sayfası dosyanın değiştirilmesinin atomik olacağını iddia ediyor .
Bununla birlikte, atomisitenin çok zor olabileceğini test etmek ve doğrulamak , ne kadar ileri giderseniz. "Mv'nin atomik olup olmadığını nasıl kontrol edebilirim?" Atomik olan gereksinimler / özellikler / belgeler mi istiyorsunuz, yoksa gerçekten test etmeniz mi gerekiyor?
Ayrıca, yukarıdaki iki işlenen dosya adının aynı dosya sisteminde olduğunu varsayar . Bunu mv
uygulamak için yardımcı program üzerinde standart bir kısıtlama bulamıyorum .
strace
mi