pipe v c

Jan Hrach jenda na yakumo.hrach.eu
Úterý Prosinec 5 03:28:41 CET 2017


Takhle?

/tmp> cat pipes.c
#include <nsautil.h>

int main(int argc, char **argv) {
  pid_t child;
  int filedesin[2];
  int filedesout[2];

  pipe(filedesin);
  pipe(filedesout);

  child = fork();
  if(child == 0) {
    while(1) {
      dup2(filedesin[1], STDOUT_FILENO);
      close(filedesin[1]);
      dup2(filedesout[0], STDIN_FILENO);
      close(filedesout[0]);
      char tmp;
      read(STDIN_FILENO, &tmp, 1);
      tmp -= 'a' - 'A';
      write(STDOUT_FILENO, &tmp, 1);
    }
  }

  char tmp;
  for(char i = 'a'; i<='z'; i++) {
    printf("writing: %c\n", i);
    write(filedesout[1], &i, 1);
    read(filedesin[0], &tmp, 1);
    printf("got: %c\n", tmp);
  }
}
/tmp> jcc pipes.c && ./pipes 
writing: a
got: A
writing: b
got: B
writing: c
got: C
writing: d
got: D
writing: e
got: E
writing: f
got: F
writing: g
got: G
writing: h
got: H
writing: i
got: I
writing: j
got: J
writing: k
got: K
writing: l
got: L
writing: m
got: M
writing: n
got: N
writing: o
got: O
writing: p
got: P
writing: q
got: Q
writing: r
got: R
writing: s
got: S
writing: t
got: T
writing: u
got: U
writing: v
got: V
writing: w
got: W
writing: x
got: X
writing: y
got: Y
writing: z
got: Z


On 4.12.2017 20:39, Milan Kratochvíl wrote:
> Zdravim vsechny,
> 
> chtel bych se zeptat zda je mozne udelat 2 pipe do jednoho procesu a to tak ze jednu pipe napojim na stdin a druhou na stdout procesu a ja pak poslu data do jedne pipe a vysledek si prectu z druhe pipe. Nejake priklady jsem nasel, ale koncily tim, ze slo jednou zapsat a jednou precist a konec. Ja bych potreboval vicekrat za sebou zapsat a precist. Cele se to snazim udelat v C a nejak se mi nedari. Kdyz chci jen cist, nebo jen psat tak pouziju funkci popen a uplne bez problemu.
> 
> Nemate nekdo s timto zkusenosti?
> 
> Diky
> Milan
> 
> _______________________________________________
> Linux mailing list
> Linux na linux.cz
> http://www.linux.cz/mailman/listinfo/linux
> 

-- 
Jan Hrach | https://jenda.hrach.eu/
GPG CD98 5440 4372 0C6D 164D A24D F019 2F8E 6527 282E


Další informace o konferenci Linux