Ce-cko - veci kolem presmerovani a zvuku.

Ivo Zacek izacek na brno.bohem-net.cz
Úterý Březen 24 20:46:22 CET 1998


Nathan L. Cutler wrote:
> 
> On Mon, Mar 23, 1998 at 08:42:12AM +0100, Roman Vesely wrote:
> >
> > Jak psat procesu, ktery spustim volanim jadra exec(), na jeho STDIN ?
> 
> Nespoustet pres exec, nybrz pres popen(). Pak staci fprintf na vznikly file
> pointer.
> 
To je opravdu nejjednodussi, pokud nam nevadi, ze nejsme
POSIX-compliant. Jinak to jde udelat i pomoci exec atd., trochu
sloziteji, ale portabilneji. Abych naprazdno nezvanil, pripojuji kousek
sveho programu. Je mirne upraveny, abych nemusel vysvetlovat co delaji
ruzne dalsi funkce, volane v originale. Tak mi tolerujte pripadny
preklep. Jde o tisk pres lpr:

    FILE * handle;
    int pip[2];
    pid_t child;
    if (pipe(pip) != 0) {
      NecoJeBlbe();
    }
    child = fork();
    if (child < 0) {
      NecoJeBlbe();
    }
    if (child == 0) {
      close(STDIN_FILENO);
      if (dup(pip[0]) != STDIN_FILENO) {
        NecoJeBlbe();
      }
      close(pip[0]);
      close(pip[1]);
      execl("/bin/lpr", "lpr", (const char *)NULL);
      NecoJeBlbe();
    }
    handle = fdopen(pip[1], "w");
    close(pip[0]);

... a v pohode piseme na handle.
Rekl bych, ze popen() je nejak podobne implementovane.

-- 
Ivo Zacek <izacek na brno.bohem-net.cz>, Supervisory Systems s.r.o. Brno
Nejspravedliveji rozdelenou veci je rozum:
nikdo si nestezuje, ze ho ma malo.




Další informace o konferenci Linux