|
Página 1 de 1
|
Escribir En Un Proceso...
Autor |
Mensaje |
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Escribir En Un Proceso...
He visto varios ejemplos de Exec y Shell, donde podemos leer la salida del comando mendiante procesos y la orden "read", por ejemplo:
Pero no he visto ningún ejemplo de como escribir en el proceso (por ejemplo para mandar comando)
¿sabeis como se podria hacer?
|
#1 Sabado, 27 May 2017, 19:15 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
Re: Escribir En Un Proceso...
Ni idea, ¿qué quieres hacer?
=================== No podemos regresar
|
#2 Sabado, 27 May 2017, 19:50 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Escribir En Un Proceso...
Shordi:
Citar: Ni idea, ¿qué quieres hacer?
Estoy liado con un front-end del programa telegram-cli... (este terminal tambien tiene un prompt), donde se le escriben las ordenes, para enviar mensajes, añadir usuarios, etc...
Mas o menos ya lo tengo conseguido:
He creado una variable tipo stream:
Citar: Public EscribirEnPrograma As Stream
Luego asigno la ejecucion de EXEC a ella, y con el parametro "For Write":
Citar: EscribirEnPrograma = Exec [ruta, "-k", "tg-server.pub"] For Write
Y por, ejemplo para mandar la orden de "lista de contactos(contact_list)", lo hago asi:
Citar: Write #EscribirEnPrograma, "contact_list" & GB.Lf
Saludos
|
#3 Sabado, 27 May 2017, 21:21 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Escribir En Un Proceso...
Un pequeño ejemplo práctico tú puedes verlo a esta página del Wiki italiano:
http://www.gambas-it.org/wiki/index..._standard_Input
Allí hay dos programas gambas (el principal se llama: "primo", el secundario se llama: "secondo"). El programa principal abre el programa secundario mediante " Process'' y envia un valor numerico al secundario, escribiendolo con Write en el proceso. El proceso secundario hace una simple adición con el valor recibido, y restituye el resultado a el proceso principal.
Saludos
última edición por vuott el Domingo, 28 May 2017, 03:45; editado 1 vez
|
#4 Domingo, 28 May 2017, 01:26 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Escribir En Un Proceso...
...por supuesto es tambien posible enviar un valor a un programa, escrito en C, abierto y gestionado con la Clase Process por un programa Gambas.
Exemplum simplex.
Vamos a escribir en un editor de texto este simple codigo fuente del programa C:
#include <stdio.h>
int main() {
char s[24];
do {
fgets(s, 24, stdin);
} while(NULL==s);
printf("%s\n", s);
return (0);
}
Este codigo debe ser compilado así:
~ $ gcc -o /ruta/del/programa/compilado /ruta/del/codigo/fuente.c
El codigo del programa principal en lenguaje gambas es:
Por tanto, el programa gambas enviará la cadena a el programa escrito en C.
Como funciona...
1) en un Terminal lanzar el programa gambas;
2) presionar Button1 para lanzar el programa escrito en C y ya compilado;
3) presionar (cuanto quiereis) Button2 para escribir la cadena anti-pythonista en el proceso del programa escrito en C;
4) para cerrar todo, presionar Button3
Para acabar todo, matando el proceso, no olvidéis de presionar Button3 !!!
última edición por vuott el Domingo, 28 May 2017, 03:46; editado 1 vez
|
#5 Domingo, 28 May 2017, 03:34 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
Re: Escribir En Un Proceso...
Vuot:
Muchas gracias por el ejemplo...
Una duda: ¿que diferencia hay entre un proceso y un stream?
|
#6 Domingo, 28 May 2017, 09:18 |
|
|
vuott
Analista Programador
Registrado: Agosto 2013
Mensajes: 2086
Edad: 60 Ubicación:
|
Re: Escribir En Un Proceso...
Stricto sensu, " Stream" es una Clase en gambas que ofrece la posibilidad de (en particular) escribir y leer datos de una porción de memoria reservada, apuntada por un Puntero.
Exemplum:
Public Sub Main()
Dim p As Pointer
Dim st As Stream
' Reserva 16 byte de memoria:
p = Alloc(SizeOf(gb.Byte), 16)
' Escribe con "Memory Stream" un mensaje anti-Pythonista en el área de memoria reservada y apuntada por el Puntero "p":
st = Memory p For Write
Write #st, "Yo no soy Pythonista !"
st.Close
' Dereferencia el Puntero y muestra orgullosamente el mensaje anti-Pythonista:
Print String@(p)
' Programmatis memoriam liberat:
Free(p)
End
Creo que la Clase " Process" de gambas se basa en la gestión de los procesos en Linux:
http://advancedlinuxprogramming.com...3-processes.pdf
http://www.tldp.org/LDP/tlk/kernel/processes.html
última edición por vuott el Lunes, 29 May 2017, 00:29; editado 7 veces
|
#7 Domingo, 28 May 2017, 14:36 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 1
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas No puede adjuntar archivos Puede descargar archivos No puede publicar eventos en el calendario
|
|
|
|
|