Xuất ra một tệp bằng cách sử dụng mô tả tệp


4

Tôi đã tự hỏi nếu nó có thể chuyển hướng đầu ra của một quá trình (trong OS X / Linux) sang một quy trình khác nếu tôi biết fd của một quy trình khác. Ví dụ:

Tôi mở một tập tin bằng cách sử dụng vim : vim /tmp/test. Điều này sẽ mở một tệp và khi tôi sử dụng lsof | grep testđể tìm ra bộ mô tả tệp tôi nhận được:

vim    18689 user    4u     REG     1,2     12288 2675530 /private/tmp/.test.swp

Nó cho tôi biết rằng FD là 4 và nó mở để viết và đọc.

Có cách nào bây giờ tôi có thể chuyển hướng đầu ra của một quá trình khác sang bộ mô tả tệp đó (ví dụ: echo 'test'> & 4 - cách này không hiệu quả nhưng bạn hiểu ý)?

Câu trả lời:


4

Mỗi quy trình có bảng FD riêng (xem http://en.wikipedia.org/wiki/File_descriptor ), nếu không, quy trình A sẽ phải liên lạc với quy trình B về các trình biên dịch (và không chỉ với B mà còn với tất cả các quy trình khác các quá trình trên máy). Vì vậy, chỉ cần biết FD (nội bộ) là không đủ, bạn cần biết FD này trỏ tới đâu:

$> ls /proc/2964/fd
total 0
lrwx------ 1 user group 64 Okt  6 15:09 0 -> /dev/pts/1
lrwx------ 1 user group 64 Okt  6 15:09 1 -> /dev/pts/1
lrwx------ 1 user group 64 Okt  6 15:09 2 -> /dev/pts/1
lrwx------ 1 user group 64 Okt  6 15:09 3 -> [eventfd]
lrwx------ 1 user group 64 Okt  6 15:09 4 -> socket:[1116342098]
l-wx------ 1 user group 64 Okt  6 15:09 5 -> /home/user/.irssi/logs/freenode/#channel.2014-10.log
lrwx------ 1 user group 64 Okt  6 15:09 6 -> [eventfd]
l-wx------ 1 user group 64 Okt  7 19:09 9 -> /home/user/.irssi/away.log

Như bạn có thể thấy, có một số FD mở trong irc-client tôi sử dụng (irssi), stdin được đọc từ tệp /dev/pts/1. Cho rằng tôi có quyền ghi vào tập tin đó, tôi có thể chuyển các thứ vào tập tin đó:

$> echo "/names" >> /dev/pts/1

Và ít nhất một cái gì đó sẽ xảy ra. Vì vậy, bạn có thể chuyển hướng đầu ra của một chương trình sang một chương trình khác có thể dẫn đến các vấn đề lạ.

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.