[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: dup ve pipe.



Merhabalar,

Acilkama gercekten uzun olmus ;) Ozet olarak anladigim gereksinim
su:

Programiniz bir baska programi fork()/exec() edip, bu programam
tek yonlu veri aktaracak. 

Kolay yontem:

---------------
{
    FILE *child_pipe;
    char *buffer;       /* aktarmak istedigimiz veriyi gosterdigini varsayiyoruz */

    child_pipe = popen("chld_process_path [args]", "w");
    fwrite(*buffer, sizeof (char), buffer_size, *child_pipe);
    fclose(child_pipe);
}
---------------

Biraz daha zor, ama daha esnek yontem (yukaridaki ile ayni isi
yapiyor. bunu gelistirip cift yonlu iletisim saglamak mumkun
popen() ile bu sansiniz yok.).

---------------
{
    int pipe[2];
    char *buffer;       /* aktarmak istedigimiz veriyi gosterdigini varsayiyoruz */

    pipe(pipe);

    if (fork() == 0) { /* child */
        close(0);       /* stdin'i kapattik */
        dup(pipe[0]);   /* pipe'in bir ucu simdi stdin */
        execlp("path", "arg0", "arg1", ...,   NULL);
    } else { /* parent */
        write(pipe[1], buffer, buffer_size);
        close(pipe[1]);
        wait(&child_status);
    }
}
---------------

NOT: Yukaridaki program parcalarini test etmedim, hemen 
     calisacak gibi degiller, ama genel fikri verecegini
     umuyorum.  Okunakli olmasi icin, sorun cikmasi olasi
     noktalarda kontroller yok.

Umarim ise yarar,
-- 
cagri



Reply to: