void f()
{
char wyrazenie[(3*WYRR+5)]="expr";
char buf[WYRR];
int wynik;
int i=0;
char wyj[40];
int fd[2];
pid_t pid;
if (pipe(fd) < 0)
{ // utworzenie potoku
exit(1);
}
if ((pid = fork()) < 0)
{ // utworzenie procesu potomnego
exit(1);
}
else if (pid == 0)
{
dup2(fd[1], STDOUT_FILENO); // połączenie std. wyjścia z końcem do zapisu
close(fd[0]);
close(fd[1]);
execvp("expr",wyr);
}
else
{
dup2(fd[0], STDIN_FILENO); // połączenie std. wejścia z końcem do odczytu
close(fd[1]);
ssize_t n = read(fd[0],buf,WYRR);
close(fd[0]);
kopiuj(buf,n);
printf("Wynik: %s\n",buf);
sscanf(buf,"%d",&wynik);
return wynik;
}
return 0;
}
No i chyba coś zepsułem z tymi deskryptorami, bo po wywołaniu funkcji i wywołaniu fgets() poza ta funkcją, dostaje EOTa od fgetsa, także chyba poprzekierowywałem te wszystkie strumienie na kolejkę i teraz nie wiem jak przywrócić je do normalnej postaci.
Jakieś wskazówki?