Bagaimana saya bisa memeriksa apakah mv apakah atom di fs saya (ext4)?
OSnya adalah Red Hat Enterprise Linux Server rilis 6.8.
Secara umum, bagaimana saya bisa memeriksa ini? Saya telah melihat sekeliling, dan tidak menemukan apakah OS saya adalah POSIX standar.
Jawaban yang Diterima:
Cukup menarik, sepertinya jawabannya mungkin, “Tergantung”.
Untuk lebih jelasnya, mv ditentukan untuk
mvutilitas akan melakukan tindakan yang setara denganrename()fungsi
Spesifikasi fungsi rename menyatakan:
rename(). ini fungsinya setara untuk file biasa dengan
yang didefinisikan oleh standar ISO C. Penyertaannya di sini memperluas definisi
itu untuk menyertakan tindakan pada direktori dan menentukan perilaku
ketika parameter baru menamai file yang sudah ada. Spesifikasi
itu mengharuskan tindakan fungsi harus atomik.
Tapi spesifikasi ISO C terbaru untuk rename() menyatakan:
7.21.4.2
renamefungsiSinopsis
#include <stdio.h> int rename(const char *old, const char *new);Deskripsi
renamefungsi menyebabkan file yang namanya string ditunjuk oleholduntuk selanjutnya dikenal dengan nama
yang diberikan oleh string yang ditunjuk olehnew. File bernamaoldtidak
lagi dapat diakses dengan nama itu. Jika sebuah file bernama dengan string menunjuk
ke dengannewada sebelum panggilan kerenamefungsi, perilaku
ditentukan oleh implementasi.Pengembalian
renamefungsi mengembalikan nol jika operasi berhasil, bukan nol jika gagal, dalam hal ini jika file tersebut ada
sebelumnya masih dikenal dengan nama aslinya.
Anehnya, perhatikan bahwa tidak ada persyaratan eksplisit untuk atomisitas. Ini 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, edit dan komentar sangat diharapkan.
Per halaman manual Linux:
Jika
newpathsudah ada, itu akan diganti secara atom, sehingga
tidak ada titik di mana proses lain mencoba mengaksesnewpathakan menemukannya hilang. Namun, mungkin akan ada
jendela di mana keduanyaoldpathdannewpathlihat file yang
diganti namanya.
Halaman manual Linux mengklaim pengganti dari file akan menjadi atom.
Pengujian dan memverifikasi atomitas itu mungkin sangat sulit, jika sejauh itu Anda harus pergi. Anda tidak jelas tentang apa yang Anda maksud dalam penggunaan "Bagaimana saya bisa memeriksa apakah mv adalah atom". Apakah Anda ingin persyaratan/spesifikasi/dokumentasi yang atomik, atau apakah Anda perlu benar-benar menguji itu?
Terkait:Mendapatkan PID jendela dengan mengkliknya?
Perhatikan juga, mengasumsikan di atas dua nama file operan berada dalam sistem file yang sama. Saya tidak dapat menemukan batasan standar pada mv utilitas untuk menegakkan itu.