GNU/Linux >> Belajar Linux >  >> Linux

Apakah Mv Atomic Di Fs?

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 dengan rename() 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 fungsi

Sinopsis

#include <stdio.h>
int rename(const char *old, const char *new);

Deskripsi

rename fungsi menyebabkan file yang namanya string ditunjuk oleh old untuk selanjutnya dikenal dengan nama
yang diberikan oleh string yang ditunjuk oleh new . File bernama old tidak
lagi dapat diakses dengan nama itu. Jika sebuah file bernama dengan string menunjuk
ke dengan new ada sebelum panggilan ke rename 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 mengakses newpath akan menemukannya hilang. Namun, mungkin akan ada
jendela di mana keduanya oldpath dan newpath 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.


Linux
  1. Basa'?

  2. Melakukan Operasi Tulis Atom Dalam File Di Bash?

  3. Mengubah Izin Berkas

  1. Bagaimana Mengganti Nama File di Linux?

  2. Linux - Mengganti spasi pada nama file

  3. Apakah mv dengan wildcard masih atomik

  1. Salin file di terminal Linux

  2. Ganti nama file di terminal Linux

  3. Pindahkan file di terminal Linux