Không, /dev/stdin
và /dev/stdout
là thiết bị sai. Đây không phải là thiết bị đầu cuối, chúng là bí danh cho đầu vào tiêu chuẩn và đầu ra tiêu chuẩn tương ứng. Theo định nghĩa, đầu vào tiêu chuẩn và đầu ra tiêu chuẩn, theo định nghĩa, các mô tả tệp mà các ứng dụng mong đợi được mở và có ý nghĩa thông thường (mô tả tệp 0 và 1 tương ứng, cũng có 2 là lỗi tiêu chuẩn). Các thiết bị như /dev/stdin
và /dev/stdout
hữu ích khi một ứng dụng yêu cầu tên tệp, nhưng người dùng ứng dụng muốn nó truy cập vào một mô tả tệp cụ thể thay vì mở một số tệp. Tùy thuộc vào biến thể unix, chúng thậm chí có thể không phải là tệp thiết bị; ví dụ, trên Linux, chúng là các liên kết tượng trưng đến/proc/self/fd/0
và bạn bè, và đến lượt chúng, các liên kết tượng trưng của Ma thuật đến bất kỳ tệp nào mà quá trình đã mở trên mô tả tệp đó.
Thay đổi quyền của /dev/stdin
và /dev/stdout
sẽ chỉ thay đổi những gì xảy ra khi những tên tệp này được sử dụng rõ ràng. Nó không ảnh hưởng đến bất cứ điều gì liên quan đến thiết bị đầu cuối và nó không ảnh hưởng đến việc sử dụng thông thường đầu vào tiêu chuẩn và đầu ra tiêu chuẩn, vì các quyền chỉ quan trọng khi mở một tên tệp cụ thể.
Điều gì mesg
làm là thay đổi các quyền của thiết bị đầu cuối kiểm soát của quá trình . Đối với một ứng dụng đang chạy trong một thiết bị đầu cuối, thiết bị đầu cuối được mở trên đầu vào tiêu chuẩn, thông số tiêu chuẩn và lỗi tiêu chuẩn (mô tả tệp 0, 1 và 2). Bạn có thể sử dụng lệnh tty
để xem thiết bị đầu cuối là gì. mesg n
tương đương chmod g-w "$(tty)"
và mesg y
tương đương với chmod g+w "$(tty)"
.
mesg n
chỉ có thể sử dụng quyền để ảnh hưởng đến tương laiwrite
vìwrite
chưa mở thiết bị đầu cuối.