Thật thú vị, có vẻ như câu trả lời có thể là, "Nó phụ thuộc".
Để rõ ràng, mv
được chỉ định để
Các mv
tiện ích có trách nhiệm thực hiện hành động tương đương với rename()
chức năng
Đặc tả chức năng đổi tên trạng thái:
Đây rename()
hàm tương đương cho các tập tin thường xuyên để mà xác định bởi các tiêu chuẩn ISO C. Bao gồm của nó ở đây mở rộng định nghĩa đó để bao gồm các hành động trên các thư mục và chỉ định hành vi khi tham số mới đặt tên cho một tệp đã tồn tại. Đặc tả đó đòi hỏi hành động của hàm phải là nguyên tử.
Nhưng thông số kỹ thuật ISO C mới nhất cho rename()
các trạng thái:
7.21.4.2 rename
Hàm
Tóm tắc
#include <stdio.h>
int rename(const char *old, const char *new);
Sự miêu tả
Các rename
chức năng gây ra các tập tin có tên là chuỗi trỏ đến bởi old
được từ nay về sau được biết đến với cái tên được đưa ra bởi chuỗi trỏ đến bởi new
. Các tập tin được đặt tên old
không còn có thể truy cập bằng tên đó. Nếu một tệp được đặt tên bởi chuỗi được chỉ đến bởi new
tồn tại trước lệnh gọi rename
hàm, thì hành vi được xác định theo thực hiện.
Trả về
Các rename
hàm trả về số không nếu các hoạt động thành công, khác không nếu nó không thành công, trong trường hợp này nếu tập tin đã tồn tại trước đây nó vẫn được biết đến bởi tên ban đầu của nó.
Đáng ngạc nhiên, lưu ý rằng không có yêu cầu rõ ràng cho nguyên tử. Nó có thể được yêu cầu ở một nơi khác trong Tiêu chuẩn C có sẵn công khai mới nhất, nhưng tôi không thể tìm thấy nó. Nếu bất cứ ai có thể tìm thấy một yêu cầu như vậy, chỉnh sửa và bình luận được chào đón nhiều hơn.
Xem thêm Có phải đổi tên () nguyên tử?
Trên trang người dùng Linux :
Nếu newpath
đã tồn tại, nó sẽ được thay thế nguyên tử, do đó không có điểm nào mà quá trình khác cố gắng truy cập
newpath
sẽ thấy nó bị thiếu. Tuy nhiên, có lẽ sẽ có một cửa sổ trong đó cả hai oldpath
và newpath
tham chiếu đến tệp được đổi tên.
Trang người đàn ông Linux tuyên bố việc thay thế tệp sẽ là nguyên tử.
Tuy nhiên, việc kiểm tra và xác minh rằng tính nguyên tử có thể rất khó khăn, nếu đó là khoảng cách bạn cần đi. Bạn không rõ ý của bạn khi sử dụng "Làm thế nào tôi có thể kiểm tra xem mv có phải là nguyên tử không". Bạn có muốn các yêu cầu / đặc điểm kỹ thuật / tài liệu mà nó là nguyên tử, hoặc bạn cần thực sự kiểm tra nó?
Cũng lưu ý, ở trên giả sử hai tên tệp toán hạng nằm trong cùng một hệ thống tệp. Tôi có thể tìm thấy không có hạn chế tiêu chuẩn về mv
tiện ích để thực thi điều đó.
strace
chưa