Portal    Foro    Buscar    FAQ    Registrarse    Conectarse

Escribir En Un Proceso...

Escribir En Un Proceso...
Artículo
Responder citando    Descargar mensaje  
Mensaje 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?



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Sabado, 27 May 2017, 19:15 ]
 


Escribir En Un Proceso...
Comentarios
Responder citando    Descargar mensaje  
Mensaje Re: Escribir En Un Proceso... 
 
Ni idea, ¿qué quieres hacer?



 
shordi - Ver perfil del usuario Enviar mensaje privado  
shordi [ Sabado, 27 May 2017, 19:50 ]
Responder citando    Descargar mensaje  
Mensaje 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



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Sabado, 27 May 2017, 21:21 ]
Responder citando    Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Domingo, 28 May 2017, 01:26 ]
Responder citando    Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Domingo, 28 May 2017, 03:34 ]
Responder citando    Descargar mensaje  
Mensaje Re: Escribir En Un Proceso... 
 
Vuot:

Muchas gracias por el ejemplo...

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



 
jsbsan - Ver perfil del usuario Enviar mensaje privado  
jsbsan [ Domingo, 28 May 2017, 09:18 ]
Responder citando    Descargar mensaje  
Mensaje 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 
vuott - Ver perfil del usuario Enviar mensaje privado  
vuott [ Domingo, 28 May 2017, 14:36 ]
Mostrar mensajes anteriores:    
 
Publicar nuevo tema  Responder al tema  Página 1 de 1
 
 

Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado
Usuarios registrados conectados: Ninguno


 



 

cron