Beispiel #1
0
void
mach_init_ports(void)
{
	mach_port_array_t	ports;
	mach_msg_type_number_t	ports_count;
	kern_return_t		kr;

	/*
	 *	Find those ports important to every task.
	 */
	kr = task_get_special_port(mach_task_self(),
				   TASK_BOOTSTRAP_PORT,
				   &bootstrap_port);
	if (kr != KERN_SUCCESS)
	    return;

	kr = mach_ports_lookup(mach_task_self(), &ports,
			       &ports_count);
	if ((kr != KERN_SUCCESS) ||
	    (ports_count < MACH_PORTS_SLOTS_USED))
	    return;

	name_server_port = ports[NAME_SERVER_SLOT];
	environment_port = ports[ENVIRONMENT_SLOT];
	service_port     = ports[SERVICE_SLOT];

	/* get rid of out-of-line data so brk has a chance of working */

	(void) vm_deallocate(mach_task_self(),
			     (vm_offset_t) ports,
			     (vm_size_t) (ports_count * sizeof *ports));
}
Beispiel #2
0
Datei: send.c Projekt: ctos/bpi
int main()
{
	mach_port_t port;
	kern_return_t err;
	printf("THE MACH_TASK_SELF IS %d.\n", mach_task_self());
	err = mach_port_allocate(mach_task_self(), MACH_PORT_RIGHT_RECEIVE, &port);
	if (err != KERN_SUCCESS)
	{
		perror("ERROR:COULD NOT ALLOCATE THE PORT.\n");
		return ;
	}
	printf("THE REGISTER PORT IS %d.\n", port);
	mach_ports_register(mach_task_self(), &port, 1);
	send(port, 9999);

	mach_port_t *recvport;
	int recv_num;
	task_get_kernel_port(mach_task_self(),&port);
	
	printf("SPECIAL KERNAL PORT IS %d.\n",port);
	mach_ports_lookup(mach_task_self(), &recvport, &recv_num);
	int i;
	for (i = 0; i < recv_num; i++)
	{
		printf("THE RECV PORT IS %d.AND THE NUM IS %d.\n", *(recvport + i), recv_num);
	}

	return 0;
}