Browse Source

Simple shared memory test

Eric Andersen 23 years ago
parent
commit
e44c028c15
2 changed files with 56 additions and 1 deletions
  1. 13 1
      test/misc/Makefile
  2. 43 0
      test/misc/sem.c

+ 13 - 1
test/misc/Makefile

@@ -19,7 +19,7 @@
 TESTDIR=../
 include $(TESTDIR)/Rules.mak
 
-TARGETS=outb
+TARGETS=sem outb
 all: $(TARGETS)
 
 outb: outb.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
@@ -32,6 +32,18 @@ outb: outb.c ../testsuite.h Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC
 	$(STRIPTOOL) -x -R .note -R .comment $@
 	./$@
 	-@ echo " "
+
+sem: sem.c Makefile $(TESTDIR)/Config $(TESTDIR)/Rules.mak $(CC)
+	-@ echo "-------"
+	-@ echo " "
+	-@ echo "Compiling vs uClibc: "
+	-@ echo " "
+	$(CC) $(CFLAGS) -c $< -o $@.o
+	$(CC) $(LDFLAGS) $@.o -o $@ $(EXTRA_LIBS)
+	$(STRIPTOOL) -x -R .note -R .comment $@
+	-./$@
+	-@ echo " "
+
 clean:
 	rm -f *.[oa] *~ core $(TARGETS)
 

+ 43 - 0
test/misc/sem.c

@@ -0,0 +1,43 @@
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+
+int main(void)
+{
+    int k, r;
+    union semun {
+	int val;
+	struct semid_ds *buf;
+	unsigned short int *array;
+	struct seminfo *__buf;
+    } sd;
+    struct semid_ds sd_buf;
+
+    k = semget(IPC_PRIVATE, 10, IPC_CREAT | 0666 );
+    printf("%d\n", k);
+
+    if (k < 0) {
+	printf("semget failed: %m\n");
+	return 1;
+    }
+
+    sd.buf = &sd_buf;
+    r = semctl(k, 0, IPC_STAT, sd);
+    printf("%d\n", r);
+
+    if (r < 0) {
+	printf("semctl IPC_STAT failed: %m\n");
+	return 1;
+    }
+
+    printf("sem_nsems = %lu\n", sd_buf.sem_nsems);
+    if (sd_buf.sem_nsems != 10) {
+	printf("failed: incorrect sem_nsems!\n");
+	return 1;
+    }
+
+    printf("succeeded\n");
+
+    return 0;
+}