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