Đọc tập tin trong khi viết trên linux


9

Theo tôi hiểu, khi một tập tin đang được viết, quá trình ghi vào tập tin có được một khóa độc quyền. Vì vậy, các quá trình khác không thể truy cập tập tin này để đọc.

Với kiến ​​thức trên, tôi không thể hiểu làm thế nào tôi có thể phát video trong trình phát phương tiện, khi trình duyệt vẫn đang tải xuống.


1
Vui lòng xác định lý do cho downvote. Cảm ơn.
Sắp xếp

2
Điều này phụ thuộc vào nền tảng, vì vậy vui lòng chỉ định HĐH mà bạn đang hỏi về. Tôi biết rằng Linux không cung cấp bất kỳ khóa ẩn nào, nhưng Windows có thể khác.
amon

Tôi đang sử dụng Linux
Sorter

Câu trả lời:


13

Hiểu biết của bạn là sai. Một số quy trình Linux có thể ghi vào cùng một tệp cùng một lúc (và những gì xảy ra sau đó có thể không được chỉ định, ngoại trừ khi các quy trình ghi đè lên các phân đoạn khác nhau của tệp đó). Và một số quy trình Linux khác (ví dụ: trình duyệt của bạn) có thể đọc một tệp được ghi vào .

Bạn có thể thông qua một quy ước để tránh điều đó . Ví dụ: bạn có thể sử dụng khóa tập tin tư vấn (áp dụng quy ước rằng mọi chương trình có liên quan nên làm điều đó), ví dụ với flock (2) , lockf (3) , v.v .... Nhưng điều đó sẽ không cấm các quy trình khác (không tuân theo quy ước của bạn) để truy cập (hoặc thậm chí ghi vào) tệp đó. Bạn có thể sử dụng máy móc cấp phép (ví dụ: bằng cách dành một người dùng hệ thống cho chương trình setuid của bạn ).

Xem thêm này & rằng câu trả lời trên StackOverflow (một số trong số họ đề cập đến phản khóa bắt buộc các cơ chế Linux cụ thể). Đọc về các thuộc tính ACID , xem xét sử dụng một số cơ sở dữ liệu ( sqlite , PostGreSQL , MongoDB , v.v.) hoặc một số tệp được lập chỉ mục ( gdbm ).

Tôi không biết Windows, nhưng nghe tin đồn rằng nó không cho phép truy cập đồng thời hoặc ghi vào cùng một tệp.


4

Các tập tin thường không bị khóa - khóa tập tin unix . Nó cũng khá phổ biến để có nhiều người đọc tệp nhưng chỉ có một người viết. Vấn đề chỉ xảy ra khi bạn sẽ có nhiều nhà văn.

Ngoài ra, hầu hết các định dạng tệp video (và đặc biệt là trên web) đều có thể phát trực tuyến, điều đó có nghĩa là bạn không cần phải có toàn bộ video để phát.


Vấn đề có thể xảy ra nếu bạn đang tính vào nội dung của tệp để không thay đổi giữa các lần đọc, ví dụ như khi cố gắng tránh tải các tệp lớn vào bộ nhớ.
yyny

2

Các hệ điều hành Unix không sử dụng khóa bắt buộc (Gnu / Linux là một Unix, các ví dụ khác là UNIX, BSD, Mac OSX). Khóa như tránh khi có thể.

Một số HĐH khác sử dụng khóa bắt buộc mọi lúc (Đáng chú ý là HĐH Windows của Microsoft). Điều này sẽ ngăn bạn chơi cho đến khi tải xuống đầy đủ, nó cũng sẽ ngăn bạn đổi tên một tệp hoặc thư mục đang mở (có một ứng dụng đang ở trong đó). Nhưng trên Unix thì không sao. Nếu một ứng dụng cần khóa nó có thể sử dụng nó. Nhưng không bình thường.


Bạn cũng có thể chọn không khóa các tệp trên Windows. Tôi chơi một nửa video tải về tất cả các thời gian. Khóa chỉ được yêu cầu cho thực thi được tải.
CodeInChaos

@CodesInChaos Quá đúng, nhưng hầu hết các ứng dụng đều khóa, bạn có biết liệu bạn có thể vào một thư mục mà không khóa không? Ngoài ra tôi chỉ nghĩ, làm thế nào để các chương trình thực thi trên Linux hoạt động với khóa ngoài (Cả hai hệ thống chỉ sử dụng trong thời gian tải, do đó, các bit có thể được tải trong một thời gian dài sau khi khởi động chương trình), có thể nó sử dụng sức mạnh siêu bò của nó.
ctrl-alt-delor

1
Tôi nghĩ rằng sự khác biệt lớn giữa Linux và Windows là Linux xử lý tệp tách biệt với mục nhập hệ thống tệp của nó. Vì vậy, bạn có thể hủy liên kết một tên tệp trong khi nó mở. Mặt khác, Windows sẽ trì hoãn việc xóa cho đến khi nó bị đóng. Linux có cho phép sửa đổi các tập tin thực thi không? Hay nó chỉ cho phép xóa + giải trí với nội dung khác nhau?
CodeInChaos

@CodesInChaos Cả hai tôi sẽ đoán, tôi đã tự hỏi điều gì sẽ xảy ra nếu bạn sửa đổi nó, không xóa + tạo. Tôi đoán là khi một ứng dụng được tải, HĐH sẽ mở tệp ở chế độ COW (Copy On Write), nếu và chỉ khi một số quá trình thay đổi nội dung, HĐH sẽ tạo một bản sao (của các khối được sửa đổi). Một bản sao được liên kết với (các) quá trình, bản kia với tệp. Khi tất cả các quy trình sử dụng bản gốc được đóng lại, thì bản gốc sẽ bị xóa (vì không có mục hệ thống tệp). Đây chỉ là dự đoán, dựa trên những gì tôi biết HĐH có thể làm.
ctrl-alt-delor
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.