Печать от FIFO передает по каналу без вмешательства?

Вы смогли создавать это с FUSE или одной из систем наложения как UnionFS. Я не думаю, что это может быть сделано или без драйвера файловой системы или без создания каждой программы, которая получает доступ к нему, используют взломы LD_PRELOAD для изменения поведения чтения ().

Существует несколько вероятных проблем реализации:

  • для применения изменений необходимо считать оба файла и сохранить промежуточное звено так или иначе; http://en.wikipedia.org/wiki/Rope_%28data_structure%29 может помочь, но что, если основной файл и файл изменений - оба несколько Гбит в размере? Кроме того, это остановит программу, которая открывает файл, в то время как Вы применяете изменения.

  • что происходит, если базовый файл изменяется таким способом, которым больше не применяются операторы изменения?

  • на самом деле, что происходит, если базовый файл изменяется вообще?

  • что происходит, при попытке записать в исправленный файл?

2
18.04.2015, 21:51
1 ответ

Определение трубы заключается в том, что записанные в нее данные считываются с другого конца. Труба не дублирует данные. Чтение на трубе является деструктивной операцией. Если на трубе имеется два считывающих устройства, то каждый байт считывается только одним из считывающих устройств.

Если вы хотите шпионить за коммуникацией между двумя программами по трубе, вы можете сделать это, вставив тройник между программами. Затем существует два канала: один от пишущего устройства к тройнику , а другой от тройника к считывающему устройству.

mkfifo pipe_w pipe_r
writer >pipe_w
reader <pipe_r
<pipe_w tee pipe_r

Схема обозначения труб в вашем вопросе непоследовательна, поэтому я не знаю точно, что вы пытались сделать. Похоже, что вы пытались передать данные из трубы обратно в саму себя. Это не сработает: вы создали замкнутый цикл, в котором часть данных возвращается обратно в трубу навсегда (только часть данных, потому что непредсказуемо, какие байты вернутся обратно в трубу, а какие - к исходному читателю).

Если между двумя процессами есть труба, и вы не можете изменить водопровод, то самый простой способ шпионить за ней - это проследить либо за процессом записи, либо за процессом чтения. Например, если процесс записи имеет PID 123 и канал открыт на файловом дескрипторе 4, под Linux, вы можете использовать

strace -p123 -e write=4
3
27.01.2020, 22:05

Теги

Похожие вопросы