Форум — Development bash: pipeline в обе стороны 0 0 Вобщем нужно stdin/stdout одного процесса подключить к stdout/stdin другого, использую средства баша. Сейчас пришлось написать небольшую прогу на си, которая этим занимается, но может есть другой способ? Ссылка
Ответ на: комментарий от ananas 04.06.05 11:13:27 MSK > named pipes ? честно говоря не хотелось бы, можно же всё сделать с безымянными... no1sm ★★ (04.06.05 11:17:51 MSK) автор топика Показать ответ Ссылка
если я не ошибаюсь то xargs делал чтото вроде того... не уверен. godexsoft (04.06.05 11:39:52 MSK) Показать ответ Ссылка
Ответ на: комментарий от godexsoft 04.06.05 11:39:52 MSK ошибаешься no1sm ★★ (04.06.05 13:52:13 MSK) автор топика Ссылка
Ответ на: комментарий от no1sm 04.06.05 11:17:51 MSK > честно говоря не хотелось бы, можно же всё сделать с безымянными... нечто типа mkfifo pipe proga1 < pipe | proga2 > pipe должно сработать. но как обойтись только безымянными, я себе не представляю ananas ★★★★★ (04.06.05 15:44:38 MSK) Показать ответы Ссылка
Ответ на: комментарий от ananas 04.06.05 15:44:38 MSK вобщем я это дело решил сделать на си: #include <stdio.h> #include <stdlib.h> #include <unistd.h> int Exec(const char *proc, int in, int out) { close(0); close(1); dup2(in, 0); dup2(out, 1); execl("/bin/sh", "/bin/sh", "-c", proc, NULL); perror("execl"); return 1; } int startProc(const char *proc, int in, int out) { pid_t pid = fork(); if (pid < 0) { perror("fork()"); return -1; } /* child */ if (pid == 0) { return Exec(proc, in, out); } /* parent */ return 0; } int main(int argc, char **argv) { int pipes[4]; if (argc != 3) { fprintf(stderr, "Usage: %s p1 p2\n", argv[0]); exit(1); } if (pipe(pipes) < 0) { perror("pipe()"); exit(1); } if (pipe(pipes + 2) < 0) { perror("pipe()"); exit(1); } startProc(argv[1], pipes[0], pipes[3]); return Exec(argv[2], pipes[2], pipes[1]); } no1sm ★★ (06.06.05 01:27:13 MSK) автор топика Ссылка
Ответ на: комментарий от ananas 04.06.05 15:44:38 MSK известная фича баша - отсутствие двунаправленных пайпов если нужно ето заюзать то юзаем ksh там ета фича кажись называется coprocess. cvv ★★★★★ (06.06.05 11:19:32 MSK) Показать ответ Ссылка
Ответ на: комментарий от cvv 06.06.05 11:19:32 MSK было бы в баше что-нибудь вроде этого, по аналогии с сокетами: exec 9<>/dev/pipe ну а дальше p1 <&9 | p2 >&9 no1sm ★★ (06.06.05 14:03:46 MSK) автор топика Ссылка