Annotation of coherent/a/usr/man/COHERENT/pipe, revision 1.1.1.1

1.1       root        1: 
                      2: 
                      3: pipe()                 COHERENT System Call                pipe()
                      4: 
                      5: 
                      6: 
                      7: 
                      8: Open a pipe
                      9: 
                     10: iinntt ppiippee(_f_d)
                     11: iinntt _f_d[22];
                     12: 
                     13: A pipe is  an interprocess communication mechanism.  pipe creates
                     14: a pipe, typically to construct pipelines in the shell sh.
                     15: 
                     16: pipe fills  in fd[0] and fd[1] with read  and write file descrip-
                     17: tors, respectively.   The file descriptors allow  the transfer of
                     18: data from one or more writers  to one or more readers.  Pipes are
                     19: buffered to  5,120 bytes.  If  more than 5,120  bytes are written
                     20: into the  pipe, the write  call will not return  until the reader
                     21: has removed sufficient data for the write to complete.  If a read
                     22: occurs on  an empty  pipe, its  completion awaits the  writing of
                     23: data.
                     24: 
                     25: When all writing processe close their write file descriptors, the
                     26: reader receives  an end  of file indication.   A write on  a pipe
                     27: with  no remaining  readers  generates a  SIGPIPE  signal to  the
                     28: caller.
                     29: 
                     30: pipe is  generally called just before fork.   Once the parent and
                     31: child processes  are created, the unused  file descriptors should
                     32: be closed in each process.
                     33: 
                     34: ***** Example *****
                     35: 
                     36: The following  example prints  the word  Waiting until a  line of
                     37: data  is entered.   It illustrates  how to  use pipe,  fstat, and
                     38: fork.
                     39: 
                     40: 
                     41: #include <stdio.h>
                     42: #include <sys/stat.h>
                     43: 
                     44: 
                     45: 
                     46: main()
                     47: {
                     48:         struct stat s;
                     49:         char buff[10];
                     50:         int fd[2];
                     51: 
                     52: 
                     53: 
                     54:         if(pipe(fd) == -1) {
                     55:                 fprintf(stderr, "Cannot open pipe");
                     56:                 exit(1);
                     57:         }
                     58: 
                     59: 
                     60: 
                     61: 
                     62: 
                     63: 
                     64: COHERENT Lexicon                                           Page 1
                     65: 
                     66: 
                     67: 
                     68: 
                     69: pipe()                 COHERENT System Call                pipe()
                     70: 
                     71: 
                     72: 
                     73:         if(!fork()) { /* child process */
                     74:                 buff[0] = getchar(); /* wait for the keyboard */
                     75:                 write(fd[1], buff, 1); /* childs copy of buff */
                     76:                 exit(0);
                     77:         }
                     78: 
                     79: 
                     80: 
                     81:         for(;;) { /* parent process. */
                     82:                 fstat(fd[0], &s);
                     83:                 if(s.st_size) { /* char in the pipe */
                     84:                         read(fd[0], buff, 1); /* parents copy */
                     85:                         printf("Got data\n");
                     86:                         exit(0);
                     87:                 }
                     88: 
                     89: 
                     90: 
                     91:                 printf("Waiting\n");
                     92:         }
                     93: }
                     94: 
                     95: 
                     96: ***** See Also *****
                     97: 
                     98: close(),  COHERENT system calls,  mknod(), read(),  sh, signal(),
                     99: write()
                    100: 
                    101: ***** Diagnostics *****
                    102: 
                    103: pipe  returns zero  on successful  calls, or -1  if it  could not
                    104: create the pipe.
                    105: 
                    106: If it  is necessary to create  a pipe between tasks  that are not
                    107: parent and  child, use /etc/mknod to create  a named pipe.  These
                    108: named pipes can be opened and used by different programs for com-
                    109: munication.  Remember to  give them the correct owner and permis-
                    110: sions.
                    111: 
                    112: 
                    113: 
                    114: 
                    115: 
                    116: 
                    117: 
                    118: 
                    119: 
                    120: 
                    121: 
                    122: 
                    123: 
                    124: 
                    125: 
                    126: 
                    127: 
                    128: 
                    129: 
                    130: COHERENT Lexicon                                           Page 2
                    131: 
                    132: 

unix.superglobalmegacorp.com

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