Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

148
Vistas
¿La implementación de avro C admite la transmisión en lugar de la salida de archivos?

Revisé el documento C en avro y veo que solo puedo obtener la salida de avro para archivar. ¿Cómo obtengo la salida serializada en un búfer para poder enviarla a través de un socket tcp? Cualquier ayuda es muy apreciada.

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Hay un avro_writer_memory() exactamente para este caso, toma el puntero del búfer y la longitud como parámetros y le da avro_writer_t que se puede usar en funciones de escritura regulares. Puede encontrar su uso en pruebas, como this o this . El ejemplo mínimo será algo como esto (dando salida al valor codificado a stderr, así que es mejor redirigirlo a algún archivo y examinarlo después de ejecutar el programa):

 #include <avro.h> #include <stdio.h> #include <unistd.h> static const char json_schema[] = "{ \"type\": \"string\" }"; int main(void) { char buf[1024]; avro_writer_t writer; avro_schema_t schema; avro_value_iface_t* iface; avro_value_t val; size_t len; if (avro_schema_from_json_literal(json_schema, &schema) != 0) { printf("failed to initialize schema\n"); goto out; } if ((writer = avro_writer_memory(buf, sizeof(buf))) == NULL) { printf("failed to initialize writer\n"); goto out_schema; } if ((iface = avro_generic_class_from_schema(schema)) == NULL) { printf("failed to get class from schema\n"); goto out_writer; } if (avro_generic_value_new(iface, &val) != 0) { printf("failed to create new value\n"); goto out_iface; } if (avro_value_reset(&val) != 0) { printf("failed to reset value\n"); goto out_val; } if (avro_value_set_string(&val, "some string wrapped by avro") != 0) { printf("failed to set value string\n"); goto out_val; } if (avro_value_write(writer, &val) != 0) { printf("failed to write value into the buffer\n"); goto out_val; } len = avro_writer_tell(writer); printf("got %lu bytes\n", (unsigned long)len); if (write(STDERR_FILENO, buf, len) != len) { printf("failed to write to stderr, oops\n"); goto out_val; } out_val: avro_value_decref(&val); out_iface: avro_value_iface_decref(iface); out_writer: avro_writer_free(writer); out_schema: avro_schema_decref(schema); out: return 0; }

Además, hay un avro_writer_memory_set_dest() que permite configurar un nuevo búfer para que lo use el escritor existente.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda