Escribir En Un Proceso...


Objetivo: 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:

EXEC "ls -la /tmp" FOR READ
...
PUBLIC SUB Process_Read()
DIM sLine AS String
READ #LAST, sLine, -256
Content = Content & sLine
PRINT sLine;
END


Pero no he visto ningún ejemplo de como escribir en el proceso (por ejemplo para mandar comando)
¿sabeis como se podria hacer?

Objetivo: Re: Escribir En Un Proceso...
Ni idea, ¿qué quieres hacer?

Perfil MP  
Objetivo: 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

Objetivo: 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
Perfil MP  
Objetivo: 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:
Private pro As Process


Public Sub Button1_Click()

AbreFluxo()

End


Private Procedure AbreFluxo()

pro = Shell "/ruta/del/programa/compilado" For Write

End


Public Sub Button2_Click()

' Escribe una cadena anti-pythonista en el proceso del programa escrito en C:
Write #pro, "Yo no soy Pythonista !"

pro.Close
AbreFluxo()

End


Public Sub Button3_Click()

pro.Close
pro.Kill
Me.Close

End



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
Perfil MP  
Objetivo: Re: Escribir En Un Proceso...
Vuot:

Muchas gracias por el ejemplo...

Una duda: ¿que diferencia hay entre un proceso y un stream?

Objetivo: 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
Perfil MP  

Página 1 de 1


  
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

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.1765s (PHP: -40% SQL: 140%)
Consultas SQL: 48 - Debug off - GZIP Activado