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 mvtiệ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 renameHàm
Tóm tắc
#include <stdio.h>
int rename(const char *old, const char *new);
Sự miêu tả
Các renamechứ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 oldkhô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 newtồn tại trước lệnh gọi renamehàm, thì hành vi được xác định theo thực hiện.
Trả về
Các renamehà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
newpathsẽ thấy nó bị thiếu. Tuy nhiên, có lẽ sẽ có một cửa sổ trong đó cả hai oldpathvà newpaththam 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ề mvtiện ích để thực thi điều đó.
stracechưa