sziasztok!
fel mondatban: lehet-e bash alatt (p1 + p2) | p3 pipeokat szepen kesziteni?
kicsit reszletesebben: ugye az van, hogy ha van p1 es p2 program, es ha p1 eredmenyeit letaroljuk egy f1 file-ba, majd p2 ezt a file-t hasznalja mint bemenet, es a p1 ill p2 programok megfeleloen parameterezheto"ek, akkor egy p1 | p2 hivassal megsporolhato az f1 file mint olyan (ugy enbloc, diszk i/o, stb.)
kovetkezo" az alapproblema, ugy altalanosan: van p1, p2 es p3 program, p1 es p2 kimenete f1 es f2, p3 pedig f1-et es f2-t dolgozza fel. tegyuk fel, hogy mindegyik p* program rendelkezik egy "--input-*" es egy "--output" kapcsoloval, ahova barmit megadhatunk amint [f]open()-nel megnyit, rendre olvasassal es irassal, ezekrol veszi a bemeneteket, es amennyiben kihagyjuk, akkor az stdin/stdout-rol/ra olvas/ir. p3-nak ertelemszeruen az egyik --input kotelezo, hiszen ket kulonbozo bemenetrol van szo, es csak egy stdin van alapertelmezesben (mondjuk ugy, hagyomany szerint).
kerdes, hogy klasszikus shell (sh, bash) kornyezetben megoldhato-e ez a (p1 + p2) | p3 pipeline, ugy hogy f1 es f2 ne keletkezzen le? az --input-* / --output kapcsolokat ill ezek letezeset ezert is "taglaltam" reszletesen, hogy ezeket lehetne/kellene hasznalni. nyilvanvaloan implementalhato a dolog alacsonyszinten (pl c-bol megfelelo" pipe(), fork(), dup2(), close(), execve() kombinaciokkal), ugy hogy a p* programokat ne kelljen modositani; azaz mindez relative kulturaltan (pl olvashatosag feladasa nelkul) megoldhato-e? ilyesmi ezkozhasznalattal elve, mint & es ; operatorok, (...subshell...), sima pipe, 1>& 3 tipusu atiranyitasok, --input /dev/fd/3 tipusu bemenet, stb? latott valaki ilyet?
(amihez kene az massziv parhuzamositott adatfeldolgozas, f* fileok 50-100-200-... megasak, van beloluk tobb szaz megfelelo bemenet, 8-16 mag csamcsogna ezen egyszerre, stb, tehat a diszk i/o megsporolasa az nem lenne baj).
thx, a.