Chúng tôi có một máy chủ FreeBSD với samba mà nhân viên sao chép tập tin hình ảnh vào, sau đó được tải lên máy chủ web của chúng tôi (theo cách này họ không phải gây rối với ftp). Đôi khi, nếu tập lệnh tải lên đang chạy cùng lúc với các tệp đang được sao chép, tập lệnh đó có thể tải lên tệp không hoàn chỉnh.Có cách nào tốt hơn để xem liệu tệp có đang được ghi vào không?
Chúng tôi đã sửa lỗi này bằng cách lấy danh sách tệp cùng với kích thước tệp, sau đó chờ 5 giây và kiểm tra lại kích thước tệp. Nếu kích thước phù hợp thì lưu của nó sẽ được tải lên, nếu chúng không khớp với nó sẽ kiểm tra lại sau 5 giây nữa.
Điều này có vẻ giống như một cách kỳ lạ để kiểm tra xem tệp có đang được ghi vào hay không. có cách nào tốt hơn, đơn giản hơn để làm điều này?
'if (! Flock ($ fp, LOCK_EX | LOCK_NB)) {// tệp bị khóa để ghi'? – DaveRandom
'flock()' có thể? –
không chắc chắn nếu 'flock()' và ổ khóa của samab sẽ nhìn thấy nhau một cách đáng tin cậy - có một số vấn đề có năm trước –