next up previous contents
Next: Blokowanie akcji przez FIFO Up: Nazwane potoki ( FIFO Previous: Tworzenie FIFO   Contents

Operowanie FIFO

Operacje We/Wy na FIFO są właściwie takie same jak dla normalnych potoków, z jednym wyjątkiem - musimy użyć wywołania lub funkcji 'open' w celu fizycznego otwarcia kanału do potoku. Używając potoków nie musieliśmy tego robić, gdyż potok rezydował w jądrze a nie w systemie plików. W naszych przykładach będziemy traktować potoki tak jak strumienie - otwieramy je za pomocą fopen(), a zamykamy za pomocą fclose().

Rozważ ten prosty proces serwera:

  /*****************************************************************************
   Zaczerpnięto z "Linux Programmer's Guide - Rozdział 6"
   (C)opyright 1994-1995, Scott Burkett
   ***************************************************************************** 
   MODUŁ: fifoserver.c
   *****************************************************************************/
  
  #include <stdio.h>
  #include <stdlib.h>
  #include <sys/stat.h>
  #include <unistd.h>
  
  #include <linux/stat.h>
  
  #define FIFO_FILE       "MOJEFIFO"
  
  int main(void)
  {
          FILE *fp;
          char readbuf[80];
  
          /* Tworzymy FIFO jeżeli nie istnieje */
          umask(0);
          mknod(FIFO_FILE, S_IFIFO|0666, 0);
  
          while(1)
          {
                  fp = fopen(FIFO_FILE, "r");
                  fgets(readbuf, 80, fp);
                  printf("Otrzymany łańcuch: %s\n", readbuf);
  fclose(fp);
          }
  
          return(0);
  }
  

Jakoże FIFO domyślnie blokuje program, uruchom go w tle:

          $ fifoserver&
  

Blokowanie akcji przez FIFO omówimy za chwilę. Na razie, rozważ następujący przykład prostego klienta:

  /*****************************************************************************
   Zaczerpnięto z "Linux Programmer's Guide - Rozdział 6"
   (C)opyright 1994-1995, Scott Burkett
   ***************************************************************************** 
   MODUŁ: fifoclient.c
   *****************************************************************************/
  
  #include <stdio.h>
  #include <stdlib.h>
  
  #define FIFO_FILE       "MOJEFIFO"
  
  int main(int argc, char *argv[])
  {
          FILE *fp;
  
          if ( argc != 2 ) {
                  printf("UŻYCIE: fifoclient [łańcuch]\n");
                  exit(1);
          }
  
          if((fp = fopen(FIFO_FILE, "w")) == NULL) {
                  perror("fopen");
                  exit(1);
          }
  
          fputs(argv[1], fp);
  
          fclose(fp);
          return(0);
  }
  



Paweł Niewiadomski
2000-10-17