Example #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;
}
Example #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;
}