Red de conocimiento informático - Problemas con los teléfonos móviles - ¿Cuáles son los usos específicos de las funciones os.mkfifo() y os.mknod() en la programación de Python? Lo mejor es tener un ejemplo de cómo configurar los parámetros para crear una tubería o sección.

¿Cuáles son los usos específicos de las funciones os.mkfifo() y os.mknod() en la programación de Python? Lo mejor es tener un ejemplo de cómo configurar los parámetros para crear una tubería o sección.

Uso de la función Mkfifo

[código]mkfifo (crear canalización de nombre real)

Funciones relacionadas

canalización, popen, abrir, umask

Archivo de encabezado

#include

#include

Definir función

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

Descripción de la función

mkfifo() creará un archivo FIFO especial de acuerdo con el nombre de ruta del parámetro. El archivo no debe existir y el modo del parámetro es el permiso. del archivo (modo ~umask), por lo que el valor de umask también afectará los permisos del archivo FIFO. Otros procesos pueden acceder al archivo FIFO creado por Mkfifo () leyendo y escribiendo archivos normales. Cuando se usa open() para abrir un archivo FIFO, el indicador O_NONBLOCK tendrá un impacto

1 Cuando se usa el indicador O_NONBLOCK, la operación de abrir el archivo FIFO para lectura regresará inmediatamente, pero si lo hay. ningún otro El proceso abre el archivo FIFO para leerlo y la operación de escritura devuelve un código de error ENXIO.

2. Cuando no se utiliza el indicador O_NONBLOCK, la operación de abrir el FIFO para lectura esperará hasta que otros procesos abran el archivo FIFO para escribir antes de regresar normalmente. De manera similar, una operación que abre un archivo FIFO para escribir esperará hasta que otros procesos abran el archivo FIFO para leer antes de regresar normalmente.

Valor de retorno

Si tiene éxito, devuelve 0; de lo contrario, devuelve -1 y el motivo del error se almacena en errno.

Código de error

La ruta del directorio especificada por el parámetro Pathname de EACCESS no tiene permisos ejecutables

EEXIST El archivo especificado por el parámetro Pathname ya existe.

ENAMETOOLONG El nombre de la ruta del parámetro es demasiado largo.

El directorio contenido en la ruta del parámetro ENOENT no existe

El espacio restante del sistema de archivos ENOSPC es insuficiente

ENOTDIR El directorio en la ruta del parámetro existe pero no es un directorio real.

El archivo especificado por el nombre de ruta del parámetro EROFS existe en el sistema de archivos de solo lectura.

Ejemplo 1:

#include

#include

#include

#include

int main(void)

{

char buf[80];

int fd;

unlink( "zieckey_fifo " );

mkfifo( "zieckey_fifo", 0777);

if ( fork() gt; 0 )

{

char s[] = "¡Hola!\n";

fd = open( "zieckey_fifo", O_WRONLY);

escribir( fd, s, sizeof(s));

//close( fd );

}

else

{

fd = open( "zieckey_fifo ", O_RDONLY);

read( fd, buf, sizeof(buf));

printf("El mensaje de la tubería es: s\n", buf);

//close( fd );

}

return 0;

}

Ejecutar

¡hola!

Ejemplo 2:

#include

#include

#include

#include

#include

int main( int argc, char **argv)

{

mode_t modo = 0666;

if ( argc !=2 )

{

printf( "Uso: [s] fifo_filename\n", argv[0] );

return -1;

}

if (mkfifo( argv[1], modo)lt; 0 )

{

error( "mkfifo");

return -1;

}

return 0;

} [/code ]