Sintaxis de la función SEM_OPEN 3 C
# sem_open (const char *name, int oflag, unsigned Long Mode, unsigned int value);
Descripción de la función SEM_OPEN ()
Se realiza un enlace entre un semáforo definido y un marco utilizando el método SEM_OPEN (). La ubicación se obtiene mediante el uso de la función SEM_OPEN () junto con el término semáforo que permite que el sistema se refiera al semáforo correspondiente a la etiqueta especificada. Hasta que el semáforo termine con éxito mediante una función SEM Close () o cualquier otro método de EXEC, la función aún puede ser utilizada por la función. La función de operación a sem_open () determina si el semáforo se genera o solo accesible, dependiendo del parámetro OFLAG. Los elementos de la bandera enumerados a continuación se pueden configurar en el parámetro OFLAG:
Bandera O_Creat:
Si un semáforo aún no se presentara, se establece mediante el uso de esta bandera. O_Creat no tiene impacto si el semáforo está presente y especificado, excepto por lo que se menciona en el O_EXCL. En su lugar, se forma un semáforo etiquetado si usamos la función SEM_OPEN (). Los parámetros del tercer y cuarto para el atributo O_Creat son modos de modo de formato T, su contenido y de tipo de datos sin firmar entero.
Se utiliza un valor aproximado de los datos para construir el semáforo. Los semáforos deben tener los valores iniciales que son mayores o equivalentes al valor SEM max. La ID de usuario eficiente del programa se asigna como la identificación única del semáforo. El ID estándar de la computadora o la ID de grupo eficiente del marco se proporciona como ID de grupo del Semaphore.
Además de los configurados en la máscara de inicialización del formato de archivo del sistema, los bytes de autorización del semáforo están asignados al valor del modo de argumento. El impacto es ambiguo cada vez que se proporcionan los elementos en un modo en lugar de los indicadores de acceso al archivo. Otras metodologías pueden vincular al semáforo invocando la función SEM_OPEN () que tiene un valor similar del título. Posteriormente, el nombre de semáforo denominado se forma la función SEM_OPEN () que incluye el indicador O_Creat.
Bandera O_EXCL:
Si el título de semáforo ya existe, SEM_OPEN () se niega si se especifican O_EXCL y O_CREAT. En términos de otros métodos que invocan la función SEM_OPEN () con O_Excl y O_Creat definidos, la verificación para ver si el semáforo ya ocurre y la formación del semáforo cuando no está presente o ambos son asíncronos.
El resultado es indefinible cuando se especifican O_Excl y O_Creat. El impacto no está definido si la variable OFLAG contiene banderas aparte de O_Creat y O_Excl. Una cadena que especifica un elemento semáforo es la fuente del parámetro de nombre. Si el valor reside en los archivos del sistema y es accesible a los métodos que usan los nombres de ruta como parámetros no se proporcionan, el parámetro del nombre cumple con los requisitos para la formación de un nombre de ruta. El elemento inicial en el nombre es una barra (/), y ningún otro elemento en el nombre puede contener cortes.
Se proporciona la misma ubicación de semáforo para cada acceso consecutivo a la función SEM_OPEN () que un método hace que tenga el valor de nombre similar, siempre que no se hicieran argumentos a la función SEM_UNLINK () para dicho semáforo. Los enlaces a los duplicados semáforos generan resultados inconsistentes. Los semáforos no identificados se emplean con el método SEM_INIT ().
Valor de retorno
La función devuelve la ubicación del semáforo después de una ejecución exitosa. Si no, esto se debe asignar ERRNO para identificar el error y generar los resultados del fallido de SEM. El encabezado contiene una descripción para el término SEM fallido. Si el SEM_OPEN () falla, siempre proporciona el valor en forma del fallido de SEM.
Ejemplo de función SEM_OPEN 3 C en Ubuntu
Veamos cómo funciona la función SEM_OPEN () en Ubuntu. Al comienzo del programa, se importan diferentes bibliotecas. Estos módulos son responsables de operar las diferentes funciones. Luego, definimos el tamaño del búfer y lo colocamos en 10. Inicializamos un búfer variable y declaramos las diferentes otras variables. En el siguiente paso, inicializamos la variable de contador junto con estos dos constructores especificados. Aplicamos el bucle for y definimos la condición. También utilizamos el bucle while.
Verificamos si el valor de la variable de contador es igual al tamaño del búfer usando un bucle de tiempo. Pero si el valor del contador es menor que el tamaño del búfer, habrá un incremento en el valor del mostrador. Además, usamos la función Sleep () para mantener la salida durante un tiempo.
Utilizamos el constructor vacío del consumidor. Dentro de esto, aplicamos el constructor de la variable "var". Inicializamos la variable de "elemento". Entonces, utilizamos un bucle de tiempo. Después de esto, usamos la instrucción if para confirmar si el valor del contador es mayor que 0 o no. Si el valor de la variable de contador es mayor que 0, hay una disminución en el valor del contador.
En esta fase del código, declaramos las diversas variables. Ahora, declaramos un constructor. Llamamos al método SEM_OPEN (). Contiene cuatro parámetros diferentes. Para finalizar el programa, aplicamos la función pthread_exit ().
Obtenemos este siguiente tipo de salida después de ejecutar el código de gastos generales:
Conclusión
En este editorial, hablamos sobre el uso de la función SEM_OPEN 3 C en Ubuntu. Primero, hemos visto la sintaxis de esta función. Luego, describimos algunas características de esta función. Después de todo esto, ejecutamos un programa en Ubuntu que tiene la función SEM_OPEN ().