diff --git a/libc/inc/ipc/sem.h b/libc/inc/ipc/sem.h index 6d5f0c9..3c01a3e 100644 --- a/libc/inc/ipc/sem.h +++ b/libc/inc/ipc/sem.h @@ -10,6 +10,42 @@ #include "time.h" #include "ipc.h" + + +/// @brief flags for semop +#define SEM_UNDO 0x1000 /* undo the operation on exit */ + + +/// #brief Commands for semctl +#define GETPID 11 /* get sempid */ +#define GETVAL 12 /* get semval */ +#define GETALL 13 /* get all semval's */ +#define GETNCNT 14 /* get semncnt */ +#define GETZCNT 15 /* get semzcnt */ +#define SETVAL 16 /* set semval */ +#define SETALL 17 /* set all semval's */ + + + + + +/// @brief Optional argument for semctl() function +union semun { + int val; /* value for SETVAL */ + struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ + unsigned short *array; /* array for GETALL & SETALL */ + struct seminfo *__buf; /* buffer for IPC_INFO */ +}; + +/// @brief Semaphore set +struct semid_ds { + struct ipc_perm sem_perm; /* Ownership and permissions */ + time_t sem_otime; /* Last semop time */ + time_t sem_ctime; /* Last change time */ + unsigned long sem_nsems; /* No. of semaphores in set */ +}; + + /// @brief Buffer to use with the semaphore IPC. struct sembuf { /// Semaphore index in array. @@ -20,6 +56,10 @@ struct sembuf { short sem_flg; }; + + + + #ifdef __KERNEL__ /// @brief Get a System V semaphore set identifier. diff --git a/mentos/src/ipc/sem.c b/mentos/src/ipc/sem.c index 3818eb4..6f4ff9a 100644 --- a/mentos/src/ipc/sem.c +++ b/mentos/src/ipc/sem.c @@ -9,13 +9,16 @@ #define __DEBUG_HEADER__ "[IPCsem]" ///< Change header. #define __DEBUG_LEVEL__ LOGLEVEL_NOTICE ///< Set log level. #include "io/debug.h" // Include debugging functions. - -#include "ipc/sem.h" +#include //test +#include "ipc/sem.h" //test #include "system/panic.h" + +//test long sys_semget(key_t key, int nsems, int semflg) { - TODO("Not implemented"); + printf("qui"); + //TODO("Not implemented"); return 0; } diff --git a/programs/tests/CMakeLists.txt b/programs/tests/CMakeLists.txt index 22d2855..639b232 100644 --- a/programs/tests/CMakeLists.txt +++ b/programs/tests/CMakeLists.txt @@ -85,6 +85,7 @@ set(TESTS t_kill.c t_itimer.c t_gid.c + t_semget.c ) foreach(TEST ${TESTS}) diff --git a/programs/tests/t_semget.c b/programs/tests/t_semget.c new file mode 100644 index 0000000..00f7899 --- /dev/null +++ b/programs/tests/t_semget.c @@ -0,0 +1,8 @@ +//testtt +#include +int main() +{ + long i = semget(0,0,0); + + return 0; +}