home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 446.lha / Popen / pipetst.c < prev    next >
C/C++ Source or Header  |  1990-12-06  |  2KB  |  61 lines

  1. /*
  2. **  A program to test the popen/pclose pair.  It takes two arguments:
  3. **  the first is either "r" or "w", and the second is a command string.
  4. **  It calls popen with the indicated "r" or "w" mode and passes it the
  5. **  command string.  If the mode was "r", then it reads from the pipe
  6. **  until eof and writes to stdout.  If the mode was "w", then it writes
  7. **  10 simple lines TO the pipe.  In either case, pclose is called and
  8. **  the exit status of the command is displayed.  You should be able to
  9. **  pass nearly any command line for execution...just be sure to enclose
  10. **  the command argument in quotes!  Standard Amiga programs that
  11. **  READ from stdin are kind of rare so use the "r" mode for most
  12. **  things.  Examples:
  13. **        pipetst w cat
  14. **        pipetst r "List c:"
  15. **        pipetst r "Dir sys:"
  16. **        pipetst r "Type pipetst.c"
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <fcntl.h>
  21.  
  22. main(argc,argv)
  23. int    argc;
  24. char    *argv[];
  25. {
  26.     char sline[80];
  27.     FILE *pipein,*pipeout,*popen();
  28.     int        rc;
  29.     short    i;
  30.  
  31.     if (argc < 2) {
  32.         printf("Need command to run\n");
  33.         exit(1);
  34.         }
  35.     if (argv[1][0] == 'r') {
  36.         pipein = popen(argv[2],"r");
  37.         if (pipein == NULL) {
  38.             printf("Couldn't open pipein file\n");
  39.             exit(1);
  40.             }
  41.         while (fgets(sline,80,pipein) != NULL)
  42.             printf("pipetst: %s",sline);
  43.         rc = pclose(pipein);
  44.         }
  45.     else if (argv[1][0] == 'w') {
  46.         pipeout = popen(argv[2],"w");
  47.         if (pipeout == NULL) {
  48.             printf("Couldn't open pipeout file\n");
  49.             exit(1);
  50.             }
  51.         for (i=0; i<10; i++)
  52.             fprintf(pipeout,"Line %d from pipetst\n",i);
  53.         rc = pclose(pipeout);
  54.         }
  55.     else {
  56.         printf("pipetst needs first parm of r or w\n");
  57.         exit(1);
  58.         }
  59.     printf("pipetst: Return code was %d\n",rc);
  60. }
  61.