Annotation of embedaddon/lrzsz/beos-runpiped.c, revision 1.1

1.1     ! misho       1: #include  <fcntl.h>
        !             2: #include <unistd.h>
        !             3: #include <be/kernel/OS.h>
        !             4: 
        !             5: int main(int argc, char **argv)
        !             6: {
        !             7:        int pid,fd1,fd2;
        !             8:        sem_id sem1,sem2;
        !             9:        sem1=create_sem(1,"piperun");
        !            10:        sem2=create_sem(1,"piperun");
        !            11:        if (sem1<B_NO_ERROR ||sem2<B_NO_ERROR) {
        !            12:                perror("create_sem");
        !            13:                exit(1);
        !            14:        }
        !            15:        acquire_sem(sem1);
        !            16:        acquire_sem(sem2);
        !            17:        pid=fork();
        !            18:        if (pid==0) {
        !            19:                fd1=open("/pipe/1",O_WRONLY|O_CREAT,0666);
        !            20:                if (fd1==-1) {
        !            21:                        perror("writer: /pipe/1");
        !            22:                        _exit(1);
        !            23:                }
        !            24:                release_sem(sem1);
        !            25:                /* wait for other side to open the pipe 1 */
        !            26:                acquire_sem(sem2);
        !            27:                /* wait for creation of pipe 2 */
        !            28:                acquire_sem(sem1);
        !            29:                fd2=open("/pipe/2",O_RDONLY);
        !            30:                if (fd2==-1) {
        !            31:                        perror("/pipe/2");
        !            32:                        _exit(1);
        !            33:                }
        !            34:                release_sem(sem2);
        !            35:                dup2(fd2,0);
        !            36:                dup2(fd1,1);
        !            37:                system(argv[2]);
        !            38: 
        !            39:                _exit(1);
        !            40:        }
        !            41:        acquire_sem(sem1);
        !            42:        fd1=open("/pipe/1",O_RDONLY);
        !            43:        release_sem(sem2);
        !            44:        if (fd1==-1) {
        !            45:                perror("/pipe/1");
        !            46:                exit(1);
        !            47:        }
        !            48:        fd2=open("/pipe/2",O_WRONLY|O_CREAT,0666);
        !            49:        if (fd2==-1) {
        !            50:                perror("writer: /pipe/2");
        !            51:                exit(1);
        !            52:        }
        !            53:        release_sem(sem1);
        !            54:        /* wait for child to open ... */
        !            55:        acquire_sem(sem2);
        !            56:        dup2(fd1,0);
        !            57:        dup2(fd2,1);
        !            58:        system(argv[1]);
        !            59:        exit(0);
        !            60: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>