/* * Note: amessage__pack and amessage__unpack will allocate memory from Heap, * please remember to free them. */ void pack_to_file(int argc, char *argv[]) { AMessage msg = AMESSAGE__INIT; // AMessage void *buf; // Buffer to store serialized data unsigned len; // Length of serialized data FILE *fp = NULL; msg.a = atoi(argv[1]); if (argc == 3) { msg.has_b = 1; msg.b = atoi(argv[2]); } len = amessage__get_packed_size(&msg); buf = malloc(len); amessage__pack(&msg, buf); fprintf(stderr, "Writing %d serialized bytes\n", len); // See the length of message if (NULL == (fp = fopen(FILE_NAME, "w"))) { fprintf(stderr, "fopen failed"); exit(-1); } fwrite(buf, len, 1, fp); fclose(fp); fwrite(buf, len, 1, stdout); // Write to stdout to allow direct command line piping free(buf); // Free the allocated serialized buffer }
int main(int argc, const char *argv[]) { AMessage msg = AMESSAGE__INIT; void *buf; unsigned len; char test[1000] = {'\0'}; msg.a = atoi(argv[1]); len = amessage__get_packed_size(&msg); buf = malloc(len); amessage__pack(&msg, buf); printf("%d\n", len); fwrite(buf, len, 1, stdout); free(buf); return 0; }
int main(int argc, char const *argv[]) { bool ok; struct ft_context context; struct ft_stream sock; ft_config.log_verbose = true; ft_initialise(); //ft_config.log_trace_mask |= FT_TRACE_ID_STREAM | FT_TRACE_ID_EVENT_LOOP; // Initializa context ok = ft_context_init(&context); if (!ok) return EXIT_FAILURE; // Resolve target struct addrinfo target_addr; struct sockaddr_un un; un.sun_family = AF_UNIX; snprintf(un.sun_path, sizeof(un.sun_path)-1, "%s", "/tmp/scpb.tmp"); target_addr.ai_family = AF_UNIX; target_addr.ai_socktype = SOCK_STREAM; target_addr.ai_protocol = 0; target_addr.ai_addr = (struct sockaddr *)&un; target_addr.ai_addrlen = sizeof(un); ok = ft_stream_connect(&sock, &stream_delegate, &context, &target_addr); if (!ok) return EXIT_FAILURE; // Prepare a message AMessage msg = AMESSAGE__INIT; msg.a = 5; msg.has_b = 1; msg.b = 7; struct ft_frame * frame = ft_pool_borrow(&context.frame_pool, FT_FRAME_TYPE_RAW_DATA); if (frame == NULL) return EXIT_FAILURE; ft_frame_format_simple(frame); struct ft_vec * vec = ft_frame_get_vec(frame); if (vec == NULL) return EXIT_FAILURE; size_t msg_len = amessage__pack(&msg, ft_vec_ptr(vec)); ft_vec_advance(vec, msg_len); ft_frame_flip(frame); ok = ft_stream_write(&sock, frame); if (!ok) return EXIT_FAILURE; ok = ft_stream_cntl(&sock, FT_STREAM_WRITE_SHUTDOWN); if (!ok) return EXIT_FAILURE; // Enter event loop (will quit when all data are transmitted) ft_context_run(&context); // Clean up ft_context_fini(&context); return EXIT_SUCCESS; }