Tại sao tôi không thể sử dụng các tệp trong Windows như tôi có thể trên Linux và OS X?

Mục lục:

Tại sao tôi không thể sử dụng các tệp trong Windows như tôi có thể trên Linux và OS X?
Tại sao tôi không thể sử dụng các tệp trong Windows như tôi có thể trên Linux và OS X?

Video: Tại sao tôi không thể sử dụng các tệp trong Windows như tôi có thể trên Linux và OS X?

Video: Tại sao tôi không thể sử dụng các tệp trong Windows như tôi có thể trên Linux và OS X?
Video: [Series giả lập 2022] Giả lập Bluestacks chạy 6 Accounts Game mướt trên cùng 1 PC trong ROK #rok - YouTube 2024, Tháng tư
Anonim
 Khi bạn sử dụng Linux và OS X, hệ điều hành sẽ không ngăn bạn xóa một tệp hiện đang được sử dụng trên Windows, bạn sẽ bị chặn không cho làm như vậy. Đưa cái gì? Tại sao bạn có thể chỉnh sửa và xóa các tệp đang sử dụng trên các hệ thống có nguồn gốc Unix chứ không phải Windows?
Khi bạn sử dụng Linux và OS X, hệ điều hành sẽ không ngăn bạn xóa một tệp hiện đang được sử dụng trên Windows, bạn sẽ bị chặn không cho làm như vậy. Đưa cái gì? Tại sao bạn có thể chỉnh sửa và xóa các tệp đang sử dụng trên các hệ thống có nguồn gốc Unix chứ không phải Windows?

Today Questionôs Câu hỏi & Trả lời phiên đến với chúng tôi lịch sự của SuperUser‚Äîa phân khu của Stack Exchange, một nhóm cộng đồng theo định hướng của các trang web Q & A.

Câu hỏi

SuperUser reader the.midget muốn biết lý do tại sao Linux và Windows xử lý các tệp trong sử dụng một cách khác nhau:

One of the things that has puzzled me ever since I started using Linux is the fact that it allows you to change the name of a file or even delete it while it is being read. An example is how I accidentally tried to delete a video while it was playing. I succeeded, and was surprised as I learnt that you can change just about anything in a file without caring if it’s being used at the moment or not.

Vậy điều gì xảy ra đằng sau hậu trường và ngăn cản anh ta xóa bỏ những thứ trong Windows giống như anh ta có thể trong Linux?

Câu trả lời

Những người đóng góp của SuperUser đã làm sáng tỏ một số điều về tình huống của the.midget. Ngạc nhiên viết:

Bất cứ khi nào bạn mở hoặc thực thi một tệp trong Windows, Windows sẽ khóa tệp đó tại chỗ (đây là một sự đơn giản hóa, nhưng thường là đúng.) Một tệp bị khóa bởi một tiến trình không thể bị xóa cho đến khi quá trình đó giải phóng nó. Đây là lý do tại sao bất cứ khi nào Windows phải tự cập nhật, bạn cần khởi động lại để Windows có hiệu lực.

Mặt khác, các hệ điều hành giống Unix như Linux và Mac OS X không khóa tập tin mà là các phần đĩa cơ bản. Điều này có vẻ là một sự khác biệt tầm thường nhưng nó có nghĩa là bản ghi tập tin trong bảng hệ thống tập tin nội dung có thể bị xóa mà không làm phiền bất kỳ chương trình nào đã mở tệp. Vì vậy, bạn có thể xóa một tập tin trong khi nó vẫn đang thực hiện hoặc sử dụng và nó sẽ tiếp tục tồn tại trên đĩa miễn là một số quá trình có một xử lý mở cho nó mặc dù mục nhập của nó trong bảng tập tin đã biến mất.

David Schwartz mở rộng ý tưởng và làm nổi bật mọi thứ nên lý tưởng như thế nào và chúng đang thực hành như thế nào:

Windows defaults to automatic, mandatory file locking. UNIXes default to manual, cooperative file locking. In both cases, the defaults can be overriden, but in both cases they usually aren’t.

A lot of old Windows code uses the C/C++ API (functions like fopen) rather than the native API (functions like CreateFile). The C/C++ API gives you no way to specify how mandatory locking will work, so you get the defaults. The default “share mode” tends to prohibit “conflicting” operations. If you open a file for writing, writes are assumed to conflict, even if you never actually write to the file. Ditto for renames.

And, here’s where it gets worse. Other than opening for read or write, the C/C++ API provides no way to specify what you intend to do with the file. So the API has to assume you are going to perform any legal operation. Since the locking is mandatory, an open that allows a conflicting operation will be refused, even if the code never intended to perform the conflicting operation but was just opening the file for another purpose.

So if code uses the C/C++ API, or uses the native API without specifically thinking about these issues, they will wind up preventing the maximum set of possible operations for every file they open and being unable to open a file unless every possible operation they could perform on it once opened is unconflicted.

In my opinion, the Windows method would work much better than the UNIX method if every program chose its share modes and open modes wisely and sanely handled failure cases. The UNIX method, however, works better if code doesn’t bother to think about these issues. Unfortunately, the basic C/C++ API doesn’t map well onto the Windows file API in a way that handles share modes and conflicting opens well. So the net result is a bit messy.

Có bạn có nó: hai cách tiếp cận khác nhau để xử lý tập tin mang lại hai kết quả khác nhau.

Có cái gì để thêm vào lời giải thích? Âm thanh trong các ý kiến. Bạn muốn đọc thêm câu trả lời từ những người dùng Stack Exchange có hiểu biết công nghệ khác? Xem toàn bộ chuỗi thảo luận tại đây.

Đề xuất: