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);
   }
   




2000-03-01


Poltronic