IPC (dos) --------- tubería con nombre (FIFO)

1. Introducción a FIFO

    1 、 API :

          #include <sys / types.h>

         #include <sys / stat.h>

        int mkfifo (const char * nombre de ruta, modo_t);

       Devolución: devuelve 0 para el éxito, -1 para el error

   2 、

      FIFO se puede utilizar para comunicarse entre cualquier proceso (procesos relacionados o correctos) siempre que tengan los derechos de acceso adecuados.

      La esencia es un caché en el kernel. Además, existe como un archivo de dispositivo especial (archivo de tubería) en el sistema de archivos. Solo hay un bloque de índice en el sistema de archivos para almacenar la ruta del archivo, y el bloque de datos está en el núcleo.

      El FIFO de tubería con nombre debe abrirse para leer y escribir al mismo tiempo, la escritura o la lectura por sí sola provocará un bloqueo.

      El comando mkfifo también puede crear canalizaciones con nombre.

      El funcionamiento de FIFO es el mismo que el de los archivos normales. Las API como abrir, cerrar, leer, escribir y desvincular están disponibles.

 

En segundo lugar, el ejemplo de código

     Cree una tubería a través del mkfifo externo y use el nombre de la tubería como parámetro de la función principal de los dos procesos para completar la comunicación de lectura y escritura en los dos procesos.

    Fifo_read.c

  

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>


int main(int argc,char *argv[])
{

    if(argc < 2)
    {
        printf("usage: a.out fifoname\n");

        exit(-1);
    }


    printf("open fifo:\n");
    int fd = open(argv[1],O_RDONLY);

    if(fd < 0)
    {
        printf("fifo open error\n");

        exit(-1);
    }
    else
    {
        printf("fifo open succcess:%d\n",fd);
    
           
        char buf[256] = {0};

        while(read(fd,buf,sizeof(buf)) > 0)
        {
        
            printf("%s",buf);

            memset(buf,0,sizeof(buf));
        }


    }
    close(fd);

    exit(0);

}   

   Fifo_write.c

 

 #include <sys/types.h>
 #include <sys/stat.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <fcntl.h>
 #include <string.h>
 #include <unistd.h>


int main(int argc,char*argv[])
{
    if(argc < 2)
    {
        printf("usage: ./a.out mkfifo\n");
        exit(-1);
    }


    printf("open fifo :\n");
    int fd = open(argv[1],O_WRONLY);
    
    if(fd < 0)
    {
        printf("fifo open error\n");

        exit(-1);
    }
    else
    {
        printf("fifo open success:%d\n",fd);


        char *str = "abcdefghijklmnopqrstuvwxyz";

        write(fd,str,strlen(str));
        
        close(fd);
    }





    exit(0);

}

Cree una canalización com.pipe y pase parámetros a los dos procesos

 

 

Supongo que te gusta

Origin blog.csdn.net/weixin_40204595/article/details/111866872
Recomendado
Clasificación