iOS/About iOS/code/ipc/client.c

58 lines
2.3 KiB
C
Raw Permalink Normal View History

2018-06-11 14:42:03 +07:00
#include <stdio.h>
#include <stdlib.h>
#include <mach/mach.h>
#include <servers/bootstrap.h>
/* our sending message structure */
struct message_send {
mach_msg_header_t header; /* header; must always be at the beginning of the message */
uint32_t x; /* our data */
};
int main(void) {
kern_return_t kr;
mach_port_t send_port; /* this is the port exposed by our server, and where we will send our messages */
/* we obstain the service port via launchd */
kr = bootstrap_look_up(bootstrap_port, "test_service", &send_port);
if (kr != KERN_SUCCESS) {
printf("unable to find service.\n");
return -1;
}
struct message_send *msg = malloc(sizeof(struct message_send)); /* allocate our sending instance */
bzero(msg, sizeof(struct message_send)); /* remember to always zero out your message! junk data might corrupt it. */
/* how to interpret the remote/local ports passed to mach_msg.
* The first arg of this macro specifies how we will use the remote port (MACH_MSG_TYPE_COPY_SEND).
* The second arg of this macro specifies how we will use the local port. We pass 0 since we don't
* use a local port, so behaviour is unspecified.
*/
msg->header.msgh_bits = MACH_MSGH_BITS(MACH_MSG_TYPE_MOVE_SEND, 0);
msg->header.msgh_remote_port = send_port; /* where to send the message */
msg->header.msgh_size = sizeof(struct message_send); /* message size */
msg->x = 1000; /* our data */
kr = mach_msg(
&(msg->header), /* our sending structure's header */
MACH_SEND_MSG, /* we want to send */
sizeof(struct message_send), /* send size */
0, /* we are not receiving anything */
MACH_PORT_NULL, /* we are not receiving anything */
MACH_MSG_TIMEOUT_NONE, /* no timeout for send */
MACH_PORT_NULL /* no notification port */
);
if (kr != MACH_MSG_SUCCESS) {
printf("failed to send: %s\n", mach_error_string(kr));
return -1;
} else {
printf("message sent!\n");
}
return 0;
}