Jak poslat programu textovou zprávu na standardni vstup stdin?
Pavel Kankovsky
peak na argo.troja.mff.cuni.cz
Neděle Říjen 22 21:58:33 CEST 2006
On 16 Oct 2006, condor wrote:
> Ahoj, potřeboval bych poslat programu na standardní vstup stdin
> řetězec. Mám konzolovou aplikaci, kde do konzoly píši příkazy a
> potřebuji příkaz poslat ze vzdáleného počítače.
[...]
> Zkusil jsem tedy poslat procesu zprávu na /proc/CisloProcesu/fd/0.
> Zpráva se vypsala na konzolu, ale na stdin nepřišla.
No samozřejmě. Když otevřete "/proc/CisloProcesu/fd/0", tak otevřete
soubor či zařízení (či jinou podobnou věc), co má jmenovaný proces na
fd 0. Pravděpodobně jeho terminál, a tudíž se to, co tam zapíšete, vypíše
na ten terminál. Ale jde to úplně mimo ten proces.
Nechce se mi tu knížku stahovat a zkoumat, co je tam napsané, ale buď to
tam mají blbě, nebo jste to špatně pochopil.
Pokud chcete něco propašovat na vstup cizího procesu, tak to musíte udělat
jinak:
- Některé terminály lze přesvědčit, aby víceméně doslova poslaly to,
co jim pošlete jakoby na obrazovku, zpátky jakoby vstup k klávesnice.
Detaily si nepamatuju.
- Je-li to pseudoterminál, můžete se pokusit zapisovat do jeho "master"
konce. Ale má obavu, že při pokusu otevřít /dev/ptmx přes /proc
získáte akorát další nezávislý klon a u BSD pseudoterminálů zase
narazíte na to, že /dev/ptyXY je exkluzívní zařízení a jádro nepovolí
nikomu dalšímu, aby to otevřel.
- Samozřejmě se můžete vždycky, máte-li patřičná privilegia, přes
ptrace() napíchnout na příslušný proces a přimět ho, aby při nejbližším
volání read(0, ...) vrátil nějaká předložená data.
Osobně bych hledal jiné řešení. Třeba něco jako program Screen. Nebo
upravit ten program.
--Pavel Kankovsky aka Peak [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."
Další informace o konferenci Linux