Paso 6: Las funciones de lectura y escritura
Para escribir en el búfer, el bosquejo primero intenta disminuir la sem_space con la función semop. Utiliza una estructura (definida en IPCBuffer.h como sem_up y sem_down) cuyos tres valores indican el índice de la matriz semáforo (otra vez, siempre 0 para este código), cuánto queremos incremento (entero positivo) o disminuir (entero negativo) y los indicadores de control opcional, respectivamente. El tercer valor de 0 significa aquí que el proceso se bloqueará si no es capaz de disminuir el semáforo (es decir, la cuenta está en 0).Después el decremento a sem_space tiene éxito, sabemos que hay espacio para al menos un dato. Sólo permitimos un proceso para leer o escribir una sola unidad de datos en un momento o de lo contrario violaríamos la interpretación de la cuenta del semáforo. No sabemos el valor del semáforo, solamente que él no era 0 cuando llamamos semop en sem_space. A continuación intentamos disminuir sem_lock. Si bloquea entonces eso significa que un proceso está accediendo al segmento de memoria compartida. Cuando el boceto está desbloqueado leerá la cabeza del índice y copia valor de una anchura de bytes de fuente de dirección de memoria a la ubicación adecuada en memoria compartida. El índice principal se incrementa y escribe de nuevo a la memoria compartida antes de incrementar sem_lock.
El último paso es incrementar la sem_data. Esto permitirá a otros procesos ver que se ha colocado nuevos datos en el búfer. Cabe señalar que no necesitamos cualquier estado adicional para manejar la situación donde los valores de cabeza y cola son iguales. Esto ocurre tanto cuando el buffer está vacío y cuando está lleno. Los semáforos sem_space y sem_data hacer un seguimiento de cuánto espacio allí es para que se leen o escriben en el búfer de datos. Cuando sem_space llega a 0, por ejemplo, esto significa que el búfer está lleno y no proceso de tratar de escribir en el búfer tendrá éxito hasta que un proceso Lee un elemento del buffer.
El método de lectura sigue la misma lógica para escribir pero disminuye sem_data primero y sem_space al final junto con mediante el índice de cola para leer del buffer incrementa. El script de Python sigue el mismo patrón para leer y escribir sólo con la API del módulo sysv_ipc.