Annotation of coherent/d/usr/src/examples/system.c, revision 1.1.1.1

1.1       root        1: #include <stdio.h>
                      2: 
                      3: FILE *newfp;
                      4: int oldstdout;
                      5: 
                      6: main()
                      7: {
                      8:        extern int system();
                      9: 
                     10:        ropen("list.fil");
                     11:        system("ls *.c");
                     12:        rclose();
                     13: }
                     14: 
                     15: /*
                     16:  * Redirect stdout prior to system() call.
                     17:  * You can't redirect child process's I/O
                     18:  * but you can redirect main()'s and let the child inherit it.
                     19:  */
                     20: ropen(tofile)
                     21: char *tofile;
                     22: {
                     23:        if ((newfp = fopen(tofile, "wr")) == NULL)
                     24:                fatal("cannot open output file \"%s\"", tofile);
                     25: 
                     26:        /* Duplicate stdout so it can be restored later */
                     27:        if ((oldstdout = dup(fileno(stdout))) == -1)
                     28:                fatal("dup failed");
                     29: 
                     30:        /* Force duplication of new file handle as stdout */
                     31:        if (dup2(fileno(newfp), fileno(stdout)) == -1)
                     32:                fatal("dup2 failed");
                     33: }
                     34: 
                     35: /*
                     36:  * Terminate redirection
                     37:  */
                     38: rclose()
                     39: {
                     40:        /* Restore old stdout */
                     41:        if (dup2(oldstdout, fileno(stdout)) == -1)
                     42:                fatal("dup2 failed");
                     43:        /* Close the extra handle */
                     44:        if (close(oldstdout) != 0)
                     45:                fatal("cannot close old stdout");
                     46:        fclose(newfp);
                     47: }
                     48: 
                     49: /*
                     50:  * Fatal error
                     51:  */
                     52: fatal(p)
                     53: char *p;
                     54: {
                     55:        fprintf(stderr, "system: %r\n", &p);
                     56:        exit(1);
                     57: }

unix.superglobalmegacorp.com

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