Annotation of embedaddon/lrzsz/beos-runpiped.c, revision 1.1.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>