semctl.c 465 B

123456789101112131415161718192021222324
  1. #include <sys/sem.h>
  2. #include <stdarg.h>
  3. #include "syscall.h"
  4. #include "ipc.h"
  5. struct semun {
  6. int val;
  7. struct semid_ds *buf;
  8. unsigned short *array;
  9. };
  10. int semctl(int id, int num, int cmd, ...)
  11. {
  12. struct semun arg;
  13. va_list ap;
  14. va_start(ap, cmd);
  15. arg = va_arg(ap, struct semun);
  16. va_end(ap);
  17. #ifdef SYS_semctl
  18. return syscall(SYS_semctl, id, num, cmd | IPC_64, arg.buf);
  19. #else
  20. return syscall(SYS_ipc, IPCOP_semctl, id, num, cmd | IPC_64, &arg.buf);
  21. #endif
  22. }