QNX (Neutrino 6.5.0) sử dụng mã nguồn mở của ksh làm shell của nó. Rất nhiều tập lệnh được cung cấp, bao gồm cả tập lệnh khởi động hệ thống, sử dụng các cấu trúc nhưSự khác biệt giữa "test-a file" và "test file -ef file"
if ! test /dev/slog -ef /dev/slog; then
# do something
fi
để kiểm tra xem trình quản lý tài nguyên có tồn tại hay không trong hệ thống tệp. Tôi đã tìm kiếm và chỉ có thể tìm thấy các giải thích rất rõ ràng rằng -ef
kiểm tra xem liệu hai thông số có trong thực tế cùng một tệp hay không. Kể từ khi tên tập tin được chỉ định là giống như nó có vẻ chỉ cần giảm để kiểm tra xem tập tin tồn tại.
Tôi đã kiểm tra hành vi của test -a
và test -e
(cả hai dường như kiểm tra tệp tồn tại của bất kỳ loại tệp nào theo các tài liệu khác nhau mà tôi đã đọc) và chúng dường như cũng hoạt động.
Có sự khác biệt nào trong séc được thực hiện giữa -ef
và -a
/-e
? Đang sử dụng -ef
một số loại nỗ lực để bảo vệ chống lại một tình trạng chủng tộc trong sự tồn tại của tập tin?
Dường như có thể kiểm tra tệp tồn tại trong hai lệnh gọi stat khác nhau. Mục nhập/dev có bị xóa bởi trình điều khiển/trình quản lý (ví dụ: sau khi bị tắt) chỉ khi ai đó kiểm tra sự tồn tại của nó không? – jhfrontz
@jhfrontz: Tôi không hoàn toàn chắc chắn ý bạn là gì nhưng (ví dụ) thiết bị giả/dev/slog chỉ bị xóa khi trình điều khiển bị giết mà thường không xảy ra ở giữa cuộc gọi đến 'test' kể từ nó là một phần của kịch bản khởi động hệ thống ban đầu. Trong trường hợp bình thường của/dev/slog, một tiến trình có thể ghi vào thiết bị để đăng nhập vào một tập tin/console/bộ nhớ, và trong khi nó có thể kết thúc với một tên tập tin khác, thiết bị tiếp xúc trong/dev phải giống như trước ghi vào/dev/slog. – tinman
Tôi đang suy đoán rằng stat'ing thiết bị có một số tác dụng phụ (ví dụ, nhắc người lái xe/người quản lý thực hiện một số loại dịch vụ vệ sinh) chẳng hạn như lệnh stat() đầu tiên (từ 'test') được hoàn thành, tệp/thiết bị được gỡ bỏ/thay thế bằng trình điều khiển - do đó gây ra chỉ số thứ hai() để nhận thông tin khác, lần lượt khiến 'test' thất bại. Đã một thời gian kể từ khi tôi sử dụng QNX, nhưng [trang người slogger] (http: //www.qnx.com/developers/docs/6.3.0SP3/neutrino/utilities/s/slogger.html) cho thấy có các tác dụng phụ khi tương tác với/dev/slog (ví dụ: hủy liên kết nó xóa thanh ghi). – jhfrontz