Hệ thống Unix bằng và lớn tránh các khóa bắt buộc. Có một vài trường hợp kernel sẽ khóa một tệp chống lại sửa đổi bởi các chương trình người dùng, nhưng không phải nếu nó chỉ được viết bởi một chương trình khác. Không có hệ thống unix nào sẽ khóa một tập tin vì một chương trình đang ghi vào nó.
Nếu bạn muốn các phiên bản đồng thời của tập lệnh của bạn không giẫm lên các ngón chân của nhau, bạn cần sử dụng một cơ chế khóa rõ ràng, chẳng hạn như .flock
lockfile
Khi bạn mở một tệp để nối thêm, >>
mỗi chương trình được đảm bảo luôn luôn ghi vào cuối tệp. Vì vậy, đầu ra của nhiều trường hợp sẽ không bao giờ ghi đè lên nhau và nếu họ lần lượt viết, đầu ra của chúng sẽ theo thứ tự như ghi.
Điều tồi tệ có thể xảy ra là nếu một trong những trường hợp viết một số lượng đầu ra và mong đợi chúng xuất hiện cùng nhau. Giữa các công tố viên được viết bởi một trường hợp, các trường hợp khác có thể thực hiện việc viết riêng của họ. Ví dụ, nếu phiên bản 1 ghi foo
, thì phiên bản 2 ghi hello
và chỉ sau đó phiên bản 2 ghi bar
thì tệp sẽ chứa foohellobar
.
Một quá trình ghi hiệu quả vào tập tin khi nó gọi cuộc gọi write
hệ thống. Một cuộc gọi đến write
là nguyên tử: mỗi cuộc gọi để write
viết một chuỗi byte sẽ không bị gián đoạn bởi các chương trình khác. Thường có một giới hạn về số lượng dữ liệu mà một cuộc gọi write
sẽ ghi một cách hiệu quả: đối với kích thước lớn hơn, chỉ phần đầu của dữ liệu được ghi và ứng dụng phải gọi write
lại. Hơn nữa, nhiều chương trình thực hiện đệm: họ tích lũy dữ liệu trong một vùng nhớ, sau đó ghi dữ liệu này ra thành một đoạn. Một số chương trình xóa bộ đệm đầu ra sau một dòng hoàn chỉnh hoặc phân tách có ý nghĩa khác. Với các chương trình như vậy, bạn có thể mong đợi toàn bộ dòng không bị gián đoạn, miễn là chúng không quá dài (lên đến vài kilobyte; điều này phụ thuộc vào HĐH). Nếu chương trình không tuôn ra tại các điểm có ý nghĩa, nhưng chỉ dựa trên kích thước bộ đệm, bạn có thể thấy một cái gì đó như 4kB từ một thể hiện, sau đó là 4kB từ một thể hiện khác, sau đó lại là 4kB từ phiên bản đầu tiên, v.v.