Пример #1
0
int main(int argc, char *argv[])
{
	int opt;

	opt = getopt(argc, argv, "cdpvs:gfm:");
	if (opt == '?')
		exit(EXIT_FAILURE);
	if (opt == -1)
	{
		usage();
		exit(EXIT_FAILURE);
	}

	key_t key = ftok(".", 's');
	int semid;
	switch (opt)
	{
	case 'c':
                sem_create(key);
                break;
        case 'p':
                semid = sem_open(key);
                sem_p(semid);
                sem_getval(semid);
                break;
        case 'v':
                semid = sem_open(key);
                sem_v(semid);
		sem_getval(semid);
                break;
        case 'd':
                semid = sem_open(key);
                sem_d(semid);
                break;
        case 's':
                semid = sem_open(key);
                sem_setval(semid, atoi(optarg));
                break;
        case 'g':
                semid = sem_open(key);
                sem_getval(semid);
                break;
        case 'f':
                semid = sem_open(key);
                sem_getmode(semid);
                break;
        case 'm':
		semid = sem_open(key);
		sem_setmode(semid, argv[2]);
		break;
	}

	return 0;
}
Пример #2
0
int main(int argc, char *argv[])
{
    //int semid = sem_create(0x1111);
    int semid = sem_open(0x1111);
    if (semid < 0) {
        perror("sem_open error");
        return -1;
    }
    int ret = 0;
    ret = sem_setval(semid, 1);
    if (ret < 0) {
        perror("sem_setval error");
        return -1;
    }
    int val = 0;
    ret = sem_getval(semid, &val);
    if (ret < 0) {
        perror("sem_getval error");
        return -1;
    }
//	printf("val is %d.\n", val);

    fork();

    if ((ret = sem_p(semid)) < 0) {
        perror("sem_p error");
        return -1;
    }
    int i = 0;
    printf("i %d, pid %d.\n", ++i, getpid());
    sleep(3);
    printf("i %d, pid %d.\n", ++i, getpid());
//	printf("pid %d, p - v.\n", getpid());
//	ret = sem_getval(semid, &val);
//	printf("val is %d.\n", val);

    if ((ret = sem_v(semid)) < 0) {
        perror("sem_p error");
        return -1;
    }

    ret = sem_getval(semid, &val);
//	printf("val is %d.\n", val);
    return ret;
}
Пример #3
0
int main(int argc, char *argv[])
{
	int procnum = 10;
	int loopnum = 100;
	int i = 0, j = 0;
	printf("please enter child process number:\n");
	scanf("%d", &procnum);
	printf("please enter child process test number:\n");
	scanf("%d", &loopnum);
	//create shm
	int ret = 0;
	int shmhdl = 0;
	ret = IPC_CreateShm(".", sizeof(int), &shmhdl);
	if (ret != 0) {
		printf("fun IPC_CreatShm() error:%d.\n", ret);
		return ret;
	}

	//create sem
	int semid = 0;
	ret = sem_creat(g_key, &semid);
	if (ret != 0) {
		if (ret == SEMERR_EEXIST) {
			ret = sem_open(g_key, &semid);
			if (ret != 0) {
				printf("fun sem_open() error, %d.\n", ret);
				return ret;
			}
		}
		else {
			return ret;
		}
	}
	int val = 0;
	ret = sem_getval(semid, &val);
	if (ret != 0) {
		printf("func sem_getval() err:%d.\n", ret);
		return ret;
	}
	printf("sem val is %d.\n", val);
//	pid_t pid;
//	for (i = 0; i < procnum; i++) {
//		pid = fork();
//		if (pid == 0) {
//			for (j = 0; j < loopnum; ++j) {
//				TestFunc(loopnum);
//			}
//			exit(0);
//		}
//	}
//	int childpid = 0;
//	while ((childpid = waitpid(-1, NULL, 0)) > 0) {
//		;
//	}
	pthread_t tidarr[200];
	for (; i < procnum; ++i) {
		pthread_create(&tidarr[i], NULL, thread_routine, NULL);
	}
	
	for (i = 0; i < procnum; ++i) {
		pthread_join(tidarr[i], NULL);
	}

	printf("parent process exit.\n");
	return 0;
}