İlginçtir ki, cevap "Bağlıdır" olabilir.
Açık olmak gerekirse, mvbelirtilen etmek
Yardımcı mvprogram, 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
renameFonksiyon Adını tarafından işaret dizedir dosyayı neden oldbundan böyle tarafından işaret dize verilen ad olarak bilinmek new. Adlı dosyaya oldartı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 newpathzaten var erişmeye çalıştığı bir başka süreç hangi anlamı yok ki, bu atomik değiştirilir
newpatheksik bulacaksınız. Ancak, muhtemelen her ikisi de bir penceredir olacak oldpathve newpathdosyaya 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 mvuygulamak için yardımcı program üzerinde standart bir kısıtlama bulamıyorum .
stracemi