Cukup menarik, sepertinya jawabannya mungkin, "Itu tergantung".
Agar jelas, mv
ditentukan untuk
The mv
utilitas akan melakukan tindakan setara dengan rename()
fungsi
The fungsi rename spesifikasi negara:
Ini rename()
fungsi setara untuk file biasa dengan yang didefinisikan oleh standar ISO C. Dimasukkannya di sini memperluas definisi itu untuk memasukkan tindakan pada direktori dan menentukan perilaku ketika parameter baru menamai file yang sudah ada. Spesifikasi itu mensyaratkan aksi fungsi menjadi atom.
Tetapi spesifikasi ISO C terbaru untuk rename()
negara:
7.21.4.2 rename
Fungsi
Ringkasan
#include <stdio.h>
int rename(const char *old, const char *new);
Deskripsi
The rename
Fungsi menyebabkan file yang namanya string ditunjukkan oleh old
untuk selanjutnya dikenal dengan nama yang diberikan oleh string ditunjukkan oleh new
. File bernama old
tidak lagi dapat diakses dengan nama itu. Jika file bernama oleh string yang ditunjukkan oleh new
ada sebelum panggilan ke rename
fungsi, perilaku didefinisikan-implementasi.
Kembali
The rename
fungsi kembali nol jika operasi berhasil, nol jika gagal, dalam hal jika file ada sebelumnya itu masih dikenal dengan nama aslinya.
Anehnya, perhatikan bahwa tidak ada persyaratan eksplisit untuk atomisitas. Mungkin diperlukan di tempat lain dalam Standar C terbaru yang tersedia untuk umum, tetapi saya belum dapat menemukannya. Jika ada yang dapat menemukan persyaratan seperti itu, suntingan dan komentar lebih dari diterima.
Lihat juga Apakah ganti nama () atomik?
Per halaman manual Linux :
Jika newpath
sudah ada, itu akan diganti secara atom, sehingga tidak ada titik di mana proses lain yang mencoba mengakses
newpath
akan menemukannya hilang. Namun, mungkin akan ada jendela di mana keduanya oldpath
dan newpath
merujuk ke file yang diubah namanya.
Halaman manual Linux mengklaim bahwa penggantian file tersebut adalah atom.
Menguji dan memverifikasi bahwa atomisitas mungkin sangat sulit, jika itu sejauh yang Anda butuhkan. Anda tidak jelas apa yang Anda maksudkan dalam penggunaan "Bagaimana saya bisa memeriksa apakah mv adalah atom". Apakah Anda ingin persyaratan / spesifikasi / dokumentasi yang atomik, atau Anda perlu benar-benar mengujinya ?
Catatan juga, di atas mengasumsikan dua nama file operan berada di sistem file yang sama. Saya tidak dapat menemukan batasan standar pada mv
utilitas untuk menegakkan itu.
strace
?