Giải thích tại
http://man7.org/linux/man-pages/man2/open.2.html
về lý do openat
cần thiết, đọc một phần:
openat() allows an application to avoid race conditions that
could occur when using open() to open files in directories other than
the current working directory. These race conditions result from the
fact that some component of the directory prefix given to open()
could be changed in parallel with the call to open(). Suppose, for
example, that we wish to create the file path/to/xxx.dep if the file
path/to/xxx exists. The problem is that between the existence check
and the file creation step, path or to (which might be symbolic
links) could be modified to point to a different location.
Tôi không hiểu tại sao cuộc đua này là một vấn đề. Nếu một ứng dụng muốn kiểm tra sự tồn tại của một số tệp và nếu vậy, hãy tạo một tệp khác , tất nhiên đây là hai bước và ứng dụng nên và có thể đảm bảo rằng không có gì can thiệp vào giữa. Chỉ khi một cuộc gọi duy nhất open()
có thể gây ra tình trạng cuộc đua, một số tòa nhà khác, chẳng hạn như openat()
cần thiết. Mặt khác, đây không phải là cho các tòa nhà chọc trời để giải quyết, nhưng đó là trách nhiệm của một ứng dụng.
Tôi không hiểu gì ở đây?