Ejemplo n.º 1
0
void
print_all_rw(lockgroup_info_t *lockgroup)
{
	unsigned int		i;

	for (i = 0;i < count;i++)
		print_rw(i, lockgroup);
        printf("\n");

}
Ejemplo n.º 2
0
int
main(int argc, char **argv)
{
	kern_return_t		kr;
	int 			arg2;
	unsigned int 		i;
	int 			found;

	setlinebuf(stdout);

	pgmname = argv[0];
	gDebug = (NULL != strstr(argv[0], "debug"));

	host_control = mach_host_self();  

	kr = host_lockgroup_info(host_control, &lockgroup_info, &count);

	if (kr != KERN_SUCCESS)
	{
		mach_error("host_statistics", kr);
		exit (EXIT_FAILURE);
	}
	if (gDebug) {
		printf("count = %d\n", count);
		for (i = 0; i < count; i++) {
			printf("%s\n",lockgroup_info[i].lockgroup_name);
		}
	}

	switch (argc) {
	case 2:
		if (strcmp(argv[1], "all") == 0) {
			print_spin_hdr();
			print_all_spin(lockgroup_info);
			print_mutex_hdr();
			print_all_mutex(lockgroup_info);
			print_rw_hdr();
			print_all_rw(lockgroup_info);
		}
		else if (strcmp(argv[1], "spin") == 0) {
			print_spin_hdr();
			print_all_spin(lockgroup_info);
		}
		else if (strcmp(argv[1], "mutex") == 0) {
			print_mutex_hdr();
			print_all_mutex(lockgroup_info);
		}
		else if (strcmp(argv[1], "rw") == 0) {
			print_rw_hdr();
			print_all_rw(lockgroup_info);
		}
		else {
			found = 0;
			for (i = 0;i < count;i++) {
				if (strcmp(argv[1], lockgroup_info[i].lockgroup_name) == 0) {
					found = 1;
					print_spin_hdr();
					print_spin(i, lockgroup_info);
					print_mutex_hdr();
					print_mutex(i, lockgroup_info);
					print_rw_hdr();
					print_rw(i, lockgroup_info);
					break;
				}
			}
			if (found == 0) 
			{ usage(); }
		}
		break;	
	case 3:
		if (sscanf(argv[2], "%d", &arg2) != 1) {
			usage();
		}
		if (arg2 < 0) {
			usage();
		}
		prime_lockgroup_deltas();
		if (strcmp(argv[1], "all") == 0) {

			while (1) {
				sleep(arg2);
				get_lockgroup_deltas();
				print_spin_hdr();
				print_all_spin(lockgroup_deltas);
				print_mutex_hdr();
				print_all_mutex(lockgroup_deltas);
				print_rw_hdr();
				print_all_rw(lockgroup_deltas);
			}
		}
		else if (strcmp(argv[1], "spin") == 0) {

			while (1) {
				sleep(arg2);
				get_lockgroup_deltas();
				print_spin_hdr();
				print_all_spin(lockgroup_deltas);
			}
		}
		else if (strcmp(argv[1], "mutex") == 0) {

			while (1) {
				sleep(arg2);
				get_lockgroup_deltas();
				print_mutex_hdr();
				print_all_mutex(lockgroup_deltas);
			}
		}
		else if (strcmp(argv[1], "rw") == 0) {

			while (1) {
				sleep(arg2);
				get_lockgroup_deltas();
				print_rw_hdr();
				print_all_rw(lockgroup_deltas);
			}
		}
		else {

			found = 0;
			for (i = 0;i < count;i++) {
				if (strcmp(argv[1], lockgroup_info[i].lockgroup_name) == 0) {
					found = 1;
					while (1) {
						sleep(arg2);
						get_lockgroup_deltas();
						print_spin_hdr();
						print_spin(i, lockgroup_deltas);
						print_mutex_hdr();
						print_mutex(i, lockgroup_deltas);
						print_rw_hdr();
						print_rw(i, lockgroup_deltas);
					}
				}
			}
			if (found == 0)
			{ usage(); }
		}
		break;
	case 4:
		if (strcmp(argv[3], "abs") != 0)
		{ usage(); }
		if (sscanf(argv[2], "%d", &arg2) != 1)
		{ usage(); }
		if (strcmp(argv[1], "all") == 0) {
			while (1)
			{
				print_spin_hdr();
				print_all_spin(lockgroup_info);
				print_mutex_hdr();
				print_all_mutex(lockgroup_info);
				print_rw_hdr();
				print_all_rw(lockgroup_info);
				sleep(arg2);
			}
		}
		else if (strcmp(argv[1], "spin") == 0) {
			while (1)
			{print_all_spin(lockgroup_info);
				sleep(arg2);
			}
		}
		else if (strcmp(argv[1], "mutex") == 0) {
			print_mutex_hdr();
			while (1)
			{print_all_mutex(lockgroup_info);
				sleep(arg2);
			}
		}
		else if (strcmp(argv[1], "rw") == 0) {
			print_rw_hdr();
			while (1)
			{print_all_rw(lockgroup_info);
				sleep(arg2);
			}
		}
		else {
			found = 0;
			for (i = 0;i < count;i++) {
				if (strcmp(argv[1], lockgroup_info[i].lockgroup_name) == 0) {
					found = 1;
					while (1)
					{
						print_spin_hdr();
						print_spin(i, lockgroup_info);
						print_mutex_hdr();
						print_mutex(i, lockgroup_info);
						print_rw_hdr();
						print_rw(i, lockgroup_info);
						sleep(arg2);
					}
				}
			}
			if (found == 0)
			{ usage(); }
		}
		break;
	default:
		usage();
		break;
	}	

	exit(0);
}
Ejemplo n.º 3
0
Archivo: upsrw.c Proyecto: AlexLov/nut
static void print_rwlist(void)
{
	int	ret;
	unsigned int	numq, numa;
	const char	*query[2];
	char	**answer;
	struct	list_t	*lhead, *llast, *ltmp, *lnext;

	/* the upsname is now required */
	if (!upsname) {
		fatalx(EXIT_FAILURE, "Error: a UPS name must be specified (upsname[@hostname[:port]])");
	}

	llast = lhead = NULL;

	query[0] = "RW";
	query[1] = upsname;
	numq = 2;

	ret = upscli_list_start(ups, numq, query);

	if (ret < 0) {

		/* old upsd --> fall back on old LISTRW technique */
		if (upscli_upserror(ups) == UPSCLI_ERR_UNKCOMMAND) {
			fatalx(EXIT_FAILURE, "Error: upsd is too old to support this query");
		}

		fatalx(EXIT_FAILURE, "Error: %s", upscli_strerror(ups));
	}

	ret = upscli_list_next(ups, numq, query, &numa, &answer);

	while (ret == 1) {

		/* RW <upsname> <varname> <value> */
		if (numa < 4) {
			fatalx(EXIT_FAILURE, "Error: insufficient data (got %d args, need at least 4)", numa);
		}

		/* sock this entry away for later */

		ltmp = xmalloc(sizeof(struct list_t));
		ltmp->name = xstrdup(answer[2]);
		ltmp->next = NULL;

		if (llast) {
			llast->next = ltmp;
		} else {
			lhead = ltmp;
		}

		llast = ltmp;

		ret = upscli_list_next(ups, numq, query, &numa, &answer);
	}

	/* use the list to get descriptions and types */

	ltmp = lhead;

	while (ltmp) {
		lnext = ltmp->next;

		print_rw(ltmp->name);

		free(ltmp->name);
		free(ltmp);
		ltmp = lnext;
	}
}