Escribir En Un Proceso...


Subject: 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?

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

Profile PM  
Subject: 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

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

Last edited by vuott on Sunday, 28 May 2017, 03:45; edited 1 time in total
Profile PM  
Subject: 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 !!!

Last edited by vuott on Sunday, 28 May 2017, 03:46; edited 1 time in total
Profile PM  
Subject: Re: Escribir En Un Proceso...
Vuot:

Muchas gracias por el ejemplo...

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

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

Last edited by vuott on Monday, 29 May 2017, 00:29; edited 7 times in total
Profile PM  

Page 1 of 1


  
You cannot post new topics
You cannot reply to topics
You cannot edit your posts
You cannot delete your posts
You cannot vote in polls
You cannot attach files
You can download files
You cannot post calendar events

   

This is a "Lo-Fi" version of our main content. To view the full version with more information, formatting and images, please click here.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Generation Time: 0.1401s (PHP: -20% SQL: 120%)
SQL queries: 26 - Debug Off - GZIP Enabled