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
mv
utilitas 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
rename
fungsiSinopsis
#include <stdio.h> int rename(const char *old, const char *new);
Deskripsi
rename
fungsi menyebabkan file yang namanya string ditunjuk olehold
untuk selanjutnya dikenal dengan nama
yang diberikan oleh string yang ditunjuk olehnew
. File bernamaold
tidak
lagi dapat diakses dengan nama itu. Jika sebuah file bernama dengan string menunjuk
ke dengannew
ada sebelum panggilan kerename
fungsi, perilaku
ditentukan oleh implementasi.Pengembalian
rename
fungsi 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
newpath
sudah ada, itu akan diganti secara atom, sehingga
tidak ada titik di mana proses lain mencoba mengaksesnewpath
akan menemukannya hilang. Namun, mungkin akan ada
jendela di mana keduanyaoldpath
dannewpath
lihat 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.