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