System V Semaphores 983
if (sign == '-') / Reverse sign of operation /
sops[numOps].sem_op = - sops[numOps].sem_op;
else if (sign == '=') / Should be '=0' /
if (sops[numOps].sem_op != 0)
cmdLineErr("Expected \"=0\" in \"%s\"\n", arg);
sops[numOps].sem_flg = 0;
for (;; flags++) {
if (flags == 'n')
sops[numOps].sem_flg |= IPC_NOWAIT;
else if (flags == 'u')
sops[numOps].sem_flg |= SEM_UNDO;
else
break;
}
if (flags != ',' && flags != '\0')
cmdLineErr("Bad trailing character (%c) in \"%s\"\n", *flags, arg);
comma = strchr(remaining, ',');
if (comma == NULL)
break; / No comma --> no more ops /
else
remaining = comma + 1;
}
return numOps + 1;
}
int
main(int argc, char *argv[])
{
struct sembuf sops[MAX_SEMOPS];
int ind, nsops;
if (argc < 2 || strcmp(argv[1], "--help") == 0)
usageError(argv[0]);
for (ind = 2; argv[ind] != NULL; ind++) {
nsops = parseOps(argv[ind], sops);
printf("%5ld, %s: about to semop() [%s]\n", (long) getpid(),
currTime("%T"), argv[ind]);
if (semop(getInt(argv[1], 0, "semid"), sops, nsops) == -1)
errExit("semop (PID=%ld)", (long) getpid());
printf("%5ld, %s: semop() completed [%s]\n", (long) getpid(),
currTime("%T"), argv[ind]);
}
exit(EXIT_SUCCESS);
}
––––––––––––––––––––––––––––––––––––––––––––––––––––––––– svsem/svsem_op.c