Annotation of 3BSD/cmd/ex/popen.c, revision 1.1

1.1     ! root        1: /* Copyright (c) 1979 Regents of the University of California */
        !             2: #include       "stdio.h"
        !             3: #define tst(a,b) (*mode == 'r' ? (b) : (a))
        !             4: 
        !             5: FILE *
        !             6: popen(cmd,mode)
        !             7: char *cmd;
        !             8: char *mode;
        !             9: {
        !            10:        register i;
        !            11:        FILE *fptr;
        !            12:        struct pstruct {
        !            13:                int reader;
        !            14:                int writer;
        !            15:        } str;
        !            16: 
        !            17:        if (pipe(&str)<0) return NULL;
        !            18:        if ((i=fork())==0) {
        !            19:                close(tst(str.writer,str.reader));
        !            20:                close(tst(0,1));
        !            21:                dup(tst(str.reader,str.writer));
        !            22:                close(tst(str.reader,str.writer));
        !            23:                execl("/bin/sh","sh","-c",cmd,0);
        !            24:                exit(1);
        !            25:        }
        !            26:        if (i== -1) return NULL;
        !            27:        close(tst(str.reader,str.writer));
        !            28:        fptr=fopen("/dev/null",tst("w","r"));
        !            29:        setbuf(fptr,NULL);
        !            30:        fptr->_file=tst(str.writer,str.reader);
        !            31:        return fptr;
        !            32: }
        !            33: 
        !            34: pclose(ptr)
        !            35: FILE *ptr;
        !            36: {
        !            37:        int st;
        !            38: 
        !            39:        fclose(ptr);
        !            40:        wait(&st);
        !            41:        return st;
        !            42: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.