EDITRAN/TR. Windows/Unix. Manual de referencia



Documentos relacionados
EDITRAN/API. Manual de referencia. API para aplicaciones. Windows/Unix

Diagrama de transiciones del autómata. Tabla de transiciones

Aplicación Multiproceso sobre HTTP Ejemplo -

Taller de Sistemas Operativos Introducción

LENGUAJE. Tema 1 - Introducción

Esquema de un programa en C: bloques básicos

Sistemas Operativos (prácticas) E.U. Informática en Segovia Universidad de Valladolid

Universidad de Pamplona Materia: Programación 1 Docente: Ing. Lusbin Raúl Vargas LENGUAJE C ESTRUCTURA DE UN PROGRAMA EN C

Para C un chero no es más que una porción de almacenamiento

Reglas básicas de la programación en lenguaje C

ASIGNATURA: SISTEMAS INFORMÁTICOS INDUSTRIALES. CURSO 4º GRUPO Octubre 2015

Estructuras de Datos Estáticas. Diseñar y programar en lenguaje C soluciones utilizando estructuras de datos estáticas

EDITRAN/CL. Manual de Usuario e Instalación. Módulo de Cliente Departamental. Windows

INTRODUCCIÓN AL TIPO COMPUESTO CADENA CONTENIDOS

Programación Estructurada

EJERCICIOS. Algo de C CADENAS

FILE *nombre_puntero_fichero; fopen(char_nombre_archivo,char_modo_apertura ); MODOS DE APERTURA. Abre un archivo de texto para lectura.

INTRODUCCIÓN AL LENGUAJE DE PROGRAMACIÓN C

Problemas de Redes de Computadores. Conjunto de problemas 1

Tema 7 Vectores y cadenas de caracteres. Fundamentos de Informática

Programación I Teoría : Entrada/Salida - Archivos.

Concepto Concept s Los L nom res re d e e los h c eros: exter te n r os o o fí s fí ico nom re ú nico i del del ar chiv chiv o o o ficher ficher en

Ejercicios de la sesión 4 de C resueltos

Punteros. Definición Un puntero es un dato que contiene una dirección de memoria.

Tipos de Datos en C. Palabras reservadas en C

2.1. Abstracción del programa count cuyo código aparecía en el Anexo A1

sockets Flujo (SOCK_STREAM) Comunicación bidireccional Confiable (entrega garantizada) Información ordenada en el destino Datagrama (SOCK_DGRAM)

SOR -::- Prácticas -::- Curso 05/06. RCP es un estándar desarrollado por Sun Microsystems y usado por muchos distribuidores de sistemas UNIX.

7. Manejo de Archivos en C.

Instituto Politécnico Nacional

El lenguaje C. #define MAX LINEA 1000 /* maximo tamanio de linea de entrada */

El lenguaje de Programación C. Fernando J. Pereda

Repaso Lenguaje C Área de Servicios Programación (Ing. Elect. y Prof. Tec.), Programación I (TUG y TUR) y Electrónica programable (TUE)

Introducción general al Lenguaje C (2010/2011)

/**********************Prototipos de ciones************************/ TOKEN scanner(); int columna(int c);

Programación I Funciones

Práctica 3ProgramacionRS232: Programación básica de la RS232

Se guardan en archivos con extencion c y los cabezales con extension h

Tema 3. Estructuras de control

Lenguajes de programación LPSI EUI UPM CADENAS DE CARACTERES

Examen Principios de Programación Febrero 2012

Pseudolenguaje. (1 byte) (valores códigos ASCII) [CHAR_MIN.. CHAR_MAX] (Definida en <limits.h>) No hay. Dominio n 1 [MIN(C)..

MC Hilda Castillo Zacatelco PROCESOS

DEFINICIÓN FORMAL DE UN AFP

/* Compilador del Lenguaje Micro (Fischer) */ #include <stdio.h> #include <string.h> #include <ctype.h>

Indicadores conceptos base EA constitución base Introducción a la programación de MT METATRADER, CONCEPTOS BÁSICOS DE PROGRAMACIÓN I

Biblioteca de sistema

Tema 2: La clase string

Sistemas Operativos Práctica 3

Nombre y apellidos: Grupo (mañana - tarde). Táchese lo que no proceda.

Prácticas de Sistemas operativos

Tema 4 El paradigma cliente-servidor

OBJETIVOS. Explicar el manejo de archivos de texto. Explicar el manejo de archivos binarios. Desarrollar programas que usen archivos.

Analista Universitario en Sistemas. Taller de Programación II. Instituto Politécnico Superior STRINGS

Operaciones de E/S en ANSI C

Lenguaje C. República Bolivariana de Venezuela Fundación Misión Sucre Aldea Fray Pedro de Agreda Introducción a la Programación III

Práctica 1: Intérprete de mandatos. Sistemas Operativos Área de Arquitectura y Tecnología de Computadores

Lenguaje C Bucles, Condicionales, operadores y Algoritmos.

El lenguaje C: Elementos básicos del lenguaje

Prueba de Laboratorio Modelo B01 Semáforos y Memoria Compartida

EDITRAN/TX. Windows/Unix. Manual de Usuario e Instalación

Práctica de gsoap. int ns enviar (unsigned nodo, std::string cadena, std::string &resultado); int ns recibir(unsigned nodo, std::string &resultado);

//Esta función es llamada cuando se produce un evento //de teclado void keycallback (void *userdata, SoEventCallback *eventoteclado) {

Contenidos. Archivos en C++ Archivos en C++ Introducción

Generador de analizadores sintácticos BISON

TEMA 4. ELEMENTOS BÁSICOS DE PROGRAMACIÓN


Prácticas de Sistemas operativos

1. Manejo de memoria estática 2. Manejo de memoria dinámica

Caracteres y Cadenas. Funcionamiento y algunas funciones para su manipulación

FUNDAMENTOS DE PROGRAMACIÓN

Memoria compartida y semáforos r/w. La página del manual que podría servir para describir estas funciones es la siguiente:

FACULTAD DE INGENIERÍA, U.B.A. Seminario de Sistemas Embebidos TRABAJO PRÁCTICO 0

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Práctica 1 Programación de Aplicaciones Distribuidas: Sockets UDP. Laboratorio de Comunicación de Datos ITT Telemática Septiembre 2011

Autor: Ing. Nahuel González INTRODUCCIÓN A C. Clase 1

Ejercicio Sockets Suma Resta. Descripción

Universidad Simón Bolívar Departamento de Computación y Tecnología de la Información Curso de Redes I CI-4815 Trimestre Septiembre Diciembre 2013

La capa de Aplicación

Tema 4: Gestión de Procesos

Objective C (Desarrollo con Apple)

Programación Estructurada

Tema 2. El lenguaje de programación Java (Parte 1)

Programación Estructurada. Sesión 2:El lenguaje de programación C

ARCHIVOS. 1. Introducción. 2. Definición de archivo. 3. Archivos de acceso secuencial. 4. Gestión de un archivo secuencial de estructuras

Mensajes. Interbloqueo

Examen escrito de Programación 1

Paso de Borland Turbo C (bajo DOS) a Anjuta (Linux) 1.

Enunciado 3 Buscar palabras de estructura similar

Práctica sobre compartición de instancias remotas.

Archivos de números. Tema 10c. Archivos de números. Archivos de números. Archivos mixtos. Archivos mixtos. Manejo de archivos de datos en C

Cadena de caracteres. 1. Fundamentos de cadenas y caracteres

Bloque 9. Ficheros de texto

Programación en C++/Funciones

Tema ADQUISICIÓN Y TRATAMIENTO DE DATOS. Departamento de Ciencias de la Computación e IA. Subprogramas en C

Seminario 1. Conexión a Oracle

Ficheros. Archivo, o fichero: Características:

Transcripción:

EDITRAN/TR Windows/Unix Manual de referencia INDRA 30 de octubre de 2014

ÍNDICE 1. INTRODUCCIÓN.... 1-1 2. INTERFAZ DE PROGRAMACIÓN.... 2-1 2.1. DESCRIPCION... 2-1 2.2. FUNCIONES DE ENVIO Y RECEPCION... 2-1 2.3. FUNCION GetErrorText... 2-2 3. COMANDO... 3-1 4. EJEMPLO DE PROGRAMACIÓN... 4-1 5. COMPONENTES DEL API.... 5-1 INDRA. Todos los derechos reservados. EDITRAN/TR

1.INTRODUCCIÓN. 1. INTRODUCCIÓN. El módulo EDItran/TR permite a los usuarios y desarrolladores de aplicaciones acceder a los servicios de envío y recepción de preguntas y respuestas de la plataforma EDItran. INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 1-1

2.INTERFAZ DE PROGRAMACIÓN. 2. INTERFAZ DE PROGRAMACIÓN. 2.1. DESCRIPCION El establecimiento de la sesión se realizará a petición del operador de EDItran/P. Una vez establecida, la aplicación cliente enviará una pregunta indicando la sesión. La respuesta la recibe el mismo proceso que envió la pregunta. Si el proceso de pregunta/respuesta no tuviera éxito, la aplicación cliente enviará de nuevo la pregunta. En el extremo servidor, se reciben las preguntas de todas las sesiones. La aplicación servidora recibirá las preguntas junto con un identificador y unos recursos que debe guardar para adjuntarlos a la respuesta de las mismas. EDItran/TR no detecta la existencia de la conexión, es responsabilidad del usuario el establecimiento de dicha conexión. 2.2. FUNCIONES DE ENVIO Y RECEPCION int SendRequest (char *Sesion, char *Id, int *presultado, int Lenguaje, char *pdata, int DataLen); int int ReceiveRequest (char *Sesion, char *Id, int *presultado, char *Recursos, int Lenguaje, char *pdata, int *pdatalen); SendResponse (char *Sesion, char *Id, int *presultado, char *Recursos, int Lenguaje, char *pdata, int DataLen); int Descripción ReceiveResponse (char *Sesion, char *Id, int *presultado, int Lenguaje, char *pdata, int *pdatalen); Envía una petición EDItran/TR por la sesión Editran/P dada. Parámetros Sesion Id Recursos pregunta presultado Sesión EDItran/P Identificador asignado por la aplicación Datos necesarios para entregar la respuesta al punto origen de la Resultado de la petición INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 2-1

2.INTERFAZ DE PROGRAMACIÓN. Lenguaje Indica el juego de caracteres de pdata, ALFABETO_BINARIO, ALFABETO_ASCII, ALFABETO_EBCDIC, ALFABETO_BCD pdata pdatalen Valores de retorno Pregunta o respuesta Longitud T_NO_ERROR_RC Resultado correcto T_SNTX_ERROR_RC Sintaxis incorrecta T_INIT_ERROR_RC Sistema EDItran/P no iniciado T_SEND_ERROR_RC Error al comunicar con EDItran/P (send) T_RECV_ERROR_RC Error al comunicar con EDItran/P (receive) T_IN_ERROR_RC Error al leer datos de entrada T_LICENSE_ERROR_RC Licencia incorrecta T_PROTOCOL_ERROR_RC Error de secuencia de señales T_NO_PERFIL_ERROR_RC Error al leer el perfil de la sesión 2.3. FUNCION GetErrorText char *GetErrorText (int Error); Descripción Transforma los valores de retorno de las funciones en texto. INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 2-2

3.COMANDO 3. COMANDO DESCRIPCION editrantr -c <id#> -s <sesion> [-l {aeb] [-v] editrantr -r <serv> [-l {aeb] [-v] Siendo: -c <id#> : cliente, identif. del mensaje -r <serv> : servidor -s <sesion> : identificador de la sesion -l aeb : lenguaje ascii, ebcdic, binario -v : modo verboso Como cliente, para una sesión EDItran/P, lee la pregunta de su entrada standard, la envía y espera indefinidamente la respuesta y al recibirla la escribe en su salida standard, y así sucesivamente hasta que recibe la señal SIGINT. Como servidor, para todas las sesiones EDItran/P, espera indefinidamente la recepción de una pregunta, la escribe en su salida standard, lee la respuesta de su entrada standard y la envía, y así sucesivamente hasta que recibe la señal SIGINT. La pregunta es procesada por /usr/bin/sh c serv que la lee de su entrada standard y escribe en su salida standard la respuesta. EJEMPLO En la parte cliente: editrantr -c 1 -s SESION1 -l a v En la parte servidora: editrantr -r v INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 3-1

4.EJEMPLO DE PROGRAMACIÓN 4. EJEMPLO DE PROGRAMACIÓN ************************ * * Departamento : Soluciones de comunicaciones * * (C) INDRA, S.A Noviembre, 2002. * * <editrant.c> * ************************ /*--------------------------------------------------------------------------- System includes ---------------------------------------------------------------------------*/ #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <signal.h> #include <string.h> #include <ctype.h> /*--------------------------------------------------------------------------- Project includes ---------------------------------------------------------------------------*/ #include "alarm/alarm.h" #include "license/des/license.h" #include "share/copyrigh.h" #include "share/cc_depen.h" #include "editrant/api/t_api.h" #include "editrant/convert/t_convert.h" /*--------------------------------------------------------------------------- Globals ---------------------------------------------------------------------------*/ static char Version[] = "1.0"; char *ProgName; /*--------------------------------------------------------------------------- Typedefs ---------------------------------------------------------------------------*/ /* Program options */ typedef struct { char Sesion[100]; /* Sesion */ char Id[ID_SIZE]; /* Id */ char Server[100]; /* Server */ char Type; /* Cliente/servidor */ int btype; /* Opcion tipo */ int bsesion; /* Opcion sesion */ int Lenguaje; /* Lenguaje */ int bverbose; /* Verboso */ opts_t; /*---------------------------------------------------------------------------- quit ----------------------------------------------------------------------------*/ void quit (int code) { char buffer[100]; sprintf (buffer, "Received signal %d\n", code); SignalAlarm (buffer); exit (code); /*--------------------------------------------------------------------------- usage INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 4-1

4.EJEMPLO DE PROGRAMACIÓN ---------------------------------------------------------------------------*/ void usage (char *format,...) { va_list ap; va_start (ap, format); fprintf (stderr, "%s: ", ProgName); vfprintf (stderr, format, ap); fprintf (stderr, "\n\n%s. Comando de envio de mensajes de EDItran/TR\n", ProgName); Copyright (Version); fprintf (stderr, "Uso: %s -c <id#> -s <sesion> [-l {aeb] [-v] \n" " %s -r <serv> [-l {aeb] [-v] \n" "Siendo: \n" " -c <id#> : cliente, identif. del mensaje \n" " -r <serv> : servidor \n" " -s <sesion> : identificador de la sesion \n" " -l aeb : lenguaje ascii, ebcdic, binario\n" " -v : modo verboso \n", ProgName, ProgName); /*--------------------------------------------------------------------------- GetResultText ---------------------------------------------------------------------------*/ void GetResultText (int Resultado) { fprintf (stderr, "Resultado - "); switch (Resultado) { case EMR_NO_ERROR: fprintf (stderr, "Correcto\n"); case EMR_ERROR_VAR_VERSION: fprintf (stderr, "Error en variable version\n"); case EMR_ERROR_VAR_RECURSOS: fprintf (stderr, "Error en variable recursos\n"); case EMR_ERROR_VAR_ID: fprintf (stderr, "Error en variable identificador\n"); case EMR_ERROR_VAR_DATOS: fprintf (stderr, "Error en variable datos\n"); case EMR_ERROR_VAR_UNKNOWN: fprintf (stderr, "Error en variable desconocida\n"); default: fprintf (stderr, "Error desconocido\n"); /*--------------------------------------------------------------------------- main ---------------------------------------------------------------------------*/ int main (int argc, char *argv[]) { opts_t int char opts; result = T_NO_ERROR_RC, Resultado = EMR_NO_ERROR, Longitud; *pstr, *BaseDir, Texto[DATA_SIZE], INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 4-2

4.EJEMPLO DE PROGRAMACIÓN Recursos[REC_SIZE], Sesion[100], Id[ID_SIZE]; Preambulo if ((ProgName = (char *) strrchr (argv[0], SLASH)) == NULL) ProgName = argv[0]; else ++ProgName; BaseDir = (char *) strrchr (argv[0], '/'); if (BaseDir!= NULL) { *BaseDir = '\0'; if (chdir (argv[0]) < 0) usage ("%s: directorio invalido", argv[0]); if (!FeatureNumberIsOk ("editrantr", 1)) { fprintf (stderr, "Licencia incorrecta.\n"); return (T_SNTX_ERROR_RC); Obtencion de opciones argv++; argc++; memset (&opts, 0, sizeof (opts)); while (*argv) { pstr = *argv; if (*pstr == '-') { /* it's an option */ pstr++; switch (tolower (*pstr)) { case 's': /* sesion */ argv++; if (*argv) { pstr = *argv; strcpy (opts.sesion, pstr); opts.bsesion = TRUE; else { usage ("Error - falta sesion"); return (T_SNTX_ERROR_RC); case 'c': /* Cliente */ opts.type = 'C'; opts.btype = TRUE; argv++; if (*argv) { pstr = *argv; strcpy (opts.id, pstr); case 'r': /* Servidor */ opts.type = 'S'; opts.btype = TRUE; argv++; if (*argv) { pstr = *argv; strcpy (opts.server, pstr); INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 4-3

4.EJEMPLO DE PROGRAMACIÓN case 'l': /* Lenguaje */ argv++; if (*argv) { pstr = *argv; else { usage ("Error - falta lenguaje"); return (T_SNTX_ERROR_RC); switch (tolower (*pstr)) { case 'a': opts.lenguaje = ALFABETO_ASCII; case 'e': opts.lenguaje = ALFABETO_EBCDIC; case 'b': opts.lenguaje = ALFABETO_BINARIO; default: usage ("Error - lenguaje incorrecto"); case 'v': /* Verboso */ opts.bverbose = TRUE; default: usage ("Opcion ilegal -- %c", tolower (*pstr)); return (T_SNTX_ERROR_RC); argv++; Validacion de opciones if (!opts.btype) { usage ("Error : falta cliente/servidor"); return (T_SNTX_ERROR_RC); if (opts.type == 'S') { if (opts.bsesion) { usage ("Error : sobra sesion"); return (T_SNTX_ERROR_RC); else if (!opts.bsesion) { usage ("Error : falta sesion"); return (T_SNTX_ERROR_RC); /* Captura de señales */ signal (SIGABRT, (SIG_PF) quit); signal (SIGFPE, (SIG_PF) quit); signal (SIGILL, (SIG_PF) quit); signal (SIGINT, (SIG_PF) quit); signal (SIGSEGV, (SIG_PF) quit); signal (SIGTERM, (SIG_PF) quit); CLIENTE if (opts.type == 'C') { if (opts.bverbose) fprintf (stderr, "Modo de operacion cliente...\n"); while (result == T_NO_ERROR_RC) { INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 4-4

4.EJEMPLO DE PROGRAMACIÓN Lee y envia la peticion gets (Texto); Longitud = strlen (Texto); result = SendRequest (opts.sesion, opts.id, &Resultado, opts.lenguaje, Texto, Longitud); Recibe y escribe la respuesta while (result == T_NO_ERROR_RC) { result = ReceiveResponse (Sesion, Id, &Resultado, opts.lenguaje, Texto, &Longitud); if (memcmp (opts.sesion, Sesion, min (strlen (opts.sesion), strlen (Sesion)))) fprintf (stderr, "Error : recibida sesion diferente a la enviada.\n"); if (memcmp (opts.id, Id, min (strlen (opts.id), strlen (Id)))) fprintf (stderr, "Error : recibido id diferente al enviado.\n"); if (Longitud) { Texto[Longitud] = 0; puts (Texto); else fflush (stdout); if (opts.bverbose && Resultado) { GetResultText (Resultado); SERVIDOR if (opts.type == 'S') { char Buffer[200]; FILE *dpin = NULL; if (opts.bverbose) { fprintf (stderr, "Modo de operacion servidor...\n"); fprintf (stderr, "Servidor : /usr/bin/sh -c %s\n", opts.server); while (result == T_NO_ERROR_RC) { Recibe y ejecuta la peticion result = ReceiveRequest (Sesion, Id, &Resultado, Recursos, opts.lenguaje, Texto, &Longitud); INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 4-5

4.EJEMPLO DE PROGRAMACIÓN Texto[Longitud] = 0; sprintf (Buffer, "%s %s", opts.server, Texto); dpin = popen (Buffer, "r"); if (dpin == NULL) { fprintf (stderr, "Error al lanzar la peticion %s\n", Buffer); pclose (dpin); Lee y envia la respuesta while (result == T_NO_ERROR_RC) { if (fgets (Texto, DATA_SIZE, dpin)) Longitud = strlen (Texto) - 1; else Longitud = 0; result = SendResponse (Sesion, Id, &Resultado, Recursos, opts.lenguaje, Texto, Longitud); if (!Longitud) pclose (dpin); ****** Finalizacion ****** if (opts.bverbose) { fprintf (stderr, "Resultado = %d - %s.\n", result, GetErrorText (result)); return (result); INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 4-6

5.COMPONENTES DEL API. 5. COMPONENTES DEL API. libedi_t.so Librería libmisc.so Librería libdes.so Librería alarm.o Objeto t_api.h. Cabecera para programas C editrantr.c Ejemplo de programación INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 5-1

Centros de Competencia ecommerce Avda. de Bruselas 35 28108 Alcobendas. Madrid, España T. +34 91 480 80 80 T. +34 91 480 50 00 www.indracompany.com INDRA. Todos los derechos reservados. EDITRAN/TR Pág. 5-1