# libgearman examples

## Simple gearman_execute()

The following examples shows how to use `gearman_execute()` to request data be sent to a function named "reverse" and print out the values.

    /*
      Example code to show how to send a string to a function called "reverse" and print the results.
    */

    /*
    # Gearman server and library
    # Copyright (C) 2012 Data Differential, http://datadifferential.com/
    # All rights reserved.
    #
    # Use and distribution licensed under the BSD license.  See
    # the COPYING file in this directory for full text.
    */

    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <libgearman/gearman.h>

    int main(void)
    {
      gearman_client_st *client= gearman_client_create(NULL);

      gearman_return_t ret= gearman_client_add_server(client, "localhost", 0);
      if (gearman_failed(ret))
      {
        return EXIT_FAILURE;
      }

      gearman_argument_t value= gearman_argument_make(0, 0, "Reverse Me", strlen("Reverse Me"));

      gearman_task_st *task= gearman_execute(client,
                                             "reverse", strlen("reverse"),  // function
                                             NULL, 0,  // no unique value provided
                                             NULL,
                                             &value, 0);

      if (task == NULL) // If gearman_execute() can return NULL on error
      {
        fprintf(stderr, "Error: %s\n", gearman_client_error(client));
        gearman_client_free(client);
        return EXIT_FAILURE;
      }

      // Make sure the task was run successfully
      if (gearman_success(gearman_task_return(task)))
      {
        // Make use of value
        gearman_result_st *result= gearman_task_result(task);
        printf("%.*s\n", (int)gearman_result_size(result), gearman_result_value(result));
      }

      gearman_client_free(client);

      return EXIT_SUCCESS;
    }

## gearman_execute() with reducer function

In this example we call the function count and tell it to map values using word_split.

    /*
      Example code to show how to send a string to a function called "word_split", reduce
      each chunk with the function count, and then print the results.
    */

    #include <string.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <libgearman/gearman.h>

    int main(void)
    {
      gearman_client_st *client= gearman_client_create(NULL);

      gearman_return_t ret= gearman_client_add_server(client, "localhost", 0);
      if (gearman_failed(ret))
      {
        return EXIT_FAILURE;
      }

      gearman_argument_t value= gearman_argument_make(0, 0, "this dog does not hunt", strlen("this dog does not hunt"));

      gearman_task_st *task= gearman_execute_by_partition(client,
                                                          "word_split", strlen("word_split"),
                                                          "count", strlen("count"),  // function
                                                          NULL, 0,  // no unique value provided
                                                          NULL,
                                                          &value, 0);

      if (task == NULL) // If gearman_execute() can return NULL on error
      {
        fprintf(stderr, "Error: %s\n", gearman_client_error(client));
        gearman_client_free(client);
        return EXIT_FAILURE;
      }

      // Make sure the task was run successfully
      if (gearman_success(gearman_task_return(task)))
      {
        // Make use of value
        gearman_result_st *result= gearman_task_result(task);
        printf("%.*s\n", (int)gearman_result_size(result), gearman_result_value(result));
      }

      gearman_client_free(client);

      return EXIT_SUCCESS;
    }

## Simple gearman_client_do()

    /*
    # Gearman server and library
    # Copyright (C) 2012 Data Differential, http://datadifferential.com/
    # All rights reserved.
    #
    # Use and distribution licensed under the BSD license.  See
    # the COPYING file in this directory for full text.
    */

    #include <string.h>
    #include <stdlib.h>
    #include <libgearman/gearman.h>

    int main(void)
    {
      gearman_client_st *client= gearman_client_create(NULL);

      gearman_return_t ret= gearman_client_add_server(client, "localhost", 0);
      if (gearman_failed(ret))
      {
        return EXIT_FAILURE;
      }

      size_t result_size;
      gearman_return_t rc;
      void *value= gearman_client_do(client, "reverse_function", "unique_value",
                                     "my string to reverse", strlen("my string to reverse"),
                                     &result_size, &rc);

      if (gearman_success(rc))
      {
        // Make use of value
      }
      free(value);

      gearman_client_free(client);

      return 0;
    }