Es muy sencillo. Un semáforo és simplemente un número. Cuando alguien coje el semáforo lo aumenta, y cuando lo libera disminuye.
Esto a nivel básico. Si necesitas guardar más información, tendrás que crear una estructura que permita guardar una lista (o tabla) con el pid de los procesos, por ejemplo.
Lo importante es que te quede claro su funcionamiento e implementación básica (lo del contador que se suma o resta), luego ya es cuestión de añadir de cosecha própia
Si tienes alguna duda avisa, hice el PFC sobre el código de Linux y tengo bastante por la mano como funcionan sus semáforos, paso de mensajes, memoria compartida, etc.
Nota: Las funciones que tu has puesto son las que el própio Linux implementa en su código, y que son visibles vía librería de código de C.