From 9e2354ec432f40e212e8d9ac54f1efb8567aef8b Mon Sep 17 00:00:00 2001 From: Guo Wenxue <guowenxue@gmail.com> Date: Fri, 07 Dec 2018 20:50:07 +0800 Subject: [PATCH] Add IPC semaphore sample code, not finish yet --- ch6_ipc/semaphore.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 60 insertions(+), 0 deletions(-) diff --git a/ch6_ipc/semaphore.c b/ch6_ipc/semaphore.c new file mode 100644 index 0000000..5b77416 --- /dev/null +++ b/ch6_ipc/semaphore.c @@ -0,0 +1,60 @@ +#include <stdio.h> +#include <string.h> +#include <errno.h> +#include <unistd.h> +#include <stdlib.h> + +#include <sys/types.h> +#include <sys/ipc.h> +#include <sys/sem.h> + +#define FTOK_PATH "/dev/zero" +#define FTOK_PROJID 0x666 + +union semun +{ + int val; + struct semid_ds *buf; + unsigned short *arry; +}; + +int main(int argc, char **argv) +{ + int semid; + + if( (semid=init_set(1)) < 0) + { + + } + +} + +int init_set(int nums) +{ + key_t key; + int semid; + union semun sem_union; + + if( (key=ftok(FTOK_PATH, FTOK_PROJID)) < 0 ) + { + printf("ftok() get IPC token failure: %s\n", strerror(errno)); + return -1; + } + + semid = semget(key, nums, IPC_CREAT|IPC_EXCL|0644); + if( semid < 0) + { + printf("semget() get semid failure: %s\n", strerror(errno)); + return -2; + } + + + sem_union.val = 1; + if( semctl(semid, 0, SETVAL, sem_union)<0 ) + { + printf("semctl() set initial value failure: %s\n", strerror(errno)); + return -3; + } + + return semid; +} -- Gitblit v1.9.1