#rust
#Ржавчина
Вопрос:
Я читаю из stdin в одном потоке и выполняю логику на основе входных данных.
У меня есть случай, когда из другого потока я хотел бы записать в свои собственные процессы STDIN
(которые будут обрабатываться существующей логикой в контексте этого другого потока без изменения какого-либо кода, если это возможно).
Возможно ли это? Не уверен, как это сделать.
Я пробовал (безуспешно) подобные вещи:
std::thread::spawn(|| {
// my own stdin
let stdin = std::io::stdin();
while true {
// write to my own stdin - doesn't work!
stdin.write_all(b"Hello, world!n");
sleep(Duration::from_secs(1));
}
});
Комментарии:
1. Ни
Stdin
один, ниStdinLock
один не реализуетWrite
. Однако это звучит немного как проблема XY. Почему вы пытаетесь обмениваться данными между потоками с помощью stdin?2. это хак для прокси-сервера отлаженного процесса (с минимальным сервером), который регулярно прослушивает stdin для получения команд от внешнего инструмента. я хочу связать стандартные идентификаторы (я на Mac, поэтому не смог записать в /proc/…/fd/ отлаженного процесса). если у вас есть лучший способ записи в STDIN произвольного процесса, дайте мне знать
3. Итак, если я правильно понимаю. IPC, в котором один процесс может вставляться между 2 другими? Например, у вас есть 3 процесса, (a) который взаимодействует с (b), а затем вы хотите иметь возможность «вставить» (c), чтобы захватить выходные данные (a) обработать его , а затем (c) переслать егов (b)?
4. A -> B -> C, где B-> C находится над stdin, и я хочу отладить C. Я потратил часы на поиски способов переадресации B -> stdin Debug (C), но не смог найти способ сделать это. Вместо этого я подумал скомпилировать C для пересылки в stdin моего отлаженного C, который прослушивает IPC и записывает в stdin самостоятельно (то есть в отлаженном контексте)
5. Вы пробовали использовать, например
File::from_raw_fd
, /File::from_raw_handle
? Должен сказать, я пробовал использовать толькоfrom_raw_fd
в контексте stdout, а не stdin.