• Publicidad

¿Qué me recomendarían hacer en este caso? (C y Perl)

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

¿Qué me recomendarían hacer en este caso? (C y Perl)

Notapor proxy_lainux » 2009-04-20 13:08 @589

Hola.

Tengo una pregunta... apenas estoy aprendiendo Perl, y tengo un programa que estoy haciendo en C... pero es bastante como para volverlo hacer en Perl, y quisiera saber si hay la posibilidad de hacer funcionar un programa Perl usando C.

Por ejemplo, tenía pensado utilizar pipe en C y usar argc y argv en Perl... para que el programa en Perl reciba datos, haga lo que tenga que hacer y luego el programa en C reciba los datos y me los muestre... y sé usar pipe en Windows, pero en Linux apenas voy a aprender...

Pero quisiera saber, si el ejemplo que mencioné sería el adecuado para trabajar con C y Perl o ¿qué me recomendarían hacer en este caso?

salu2 :D
proxy_lainux
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2009-04-13 21:38 @943

Publicidad

Notapor creating021 » 2009-04-20 14:42 @654

Depende del uso de los programas, se puede usar el interprete (perl) en el código del programa hecho en C, o puedes usar C desde Perl con Inline::C; fuera de eso está lo se puede hacer con IPC...

¿Por qué no nos cuentas qué hace el programa en C y qué hace el programa en Perl?
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor proxy_lainux » 2009-04-21 21:36 @941

Hola

Mira, el programa, hace varias cosas, desde buscar un archivo, decirme las unidades de la computadora, abrir un programa, etc... lo que pasa es que cuando empecé a programar en C, hice un programa que me hiciera varias cosas, como las que acabo de mencionar, la mayoría de las cosas son ejemplos de tutoriales, y cosas que aprendí hacer con API y lo mismo con Linux, y hace varios años cuando usaba Visual Basic 6, hice un programa que leyera y mandara mails... y ahorita se me ocurrió volverlo a hacer en C, y ya logré hacer que el programa leyera los mails mediante POP3, pero todavía tenía el problema de visualizarlos como yo quisiera...

Y todavía me falta lo de descarga de archivos adjuntos, pero cuando me enteré que en Perl es un poco más fácil... y ahorita que he estado estudiando Perl, me di cuenta de que sí es más fácil... pero me gusta hacer los programas portables, aunque todavía desconozco varias cosas... pero esa es una de las razones del porqué intento hacer el programa en C...

Por eso sería genial poder usar Perl con C o saber si es posible usar pipe para manejar Perl desde C.
proxy_lainux
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2009-04-13 21:38 @943

Notapor explorer » 2009-04-22 03:46 @199

Naturalmente que se puede hacer, porque perl es un ejecutable más del sistema, así que puedes transmitirle argumentos usando el espacio de variables del sistema, argumentos por línea de comandos, por la entrada estándar usando tuberías, por memoria compartida con IPC, etc. etc.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor creating021 » 2009-04-22 21:08 @922

Se podría decir que las tuberías (pipes) son la mejor forma de hacerlo, pero como quieres portabilidad yo no las usaría:
perlport escribiste:In general, don't directly access the system in code meant to be
portable. That means, no "system", "exec", "fork", "pipe", "``",
"qx//", "open" with a "|", nor any of the other things that makes being
a perl hacker worth being.

Lo mejor sería que el programa en C cree un fichero con el contenido necesario y le pasara por un argumento, al programa en Perl, la ruta del fichero con el cual trabajar.

Aunque no creo que tengas problemas usando tuberías (entre otras cosas) en Windows y UNIX con Perl.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Notapor explorer » 2009-04-23 05:11 @258

Una solución portátil (portable y portabilidad no están en el diccionario) la obtendrías siempre que usases herramientas reconocidas a lo largo de los años y por el mercado de software en donde te mueves, incluyendo el sistema operativo.

Si vas a hacer una solución que no se va a mover de una cierta arquitectura -por ejemplo, estar siempre en Linux/UNIX- entonces solo tienes que preocuparte de mantener una compatibilidad dentro de esa arquitectura.

Si estás en Linux/UNIX y quieres usar C para llamar a Perl, solo tienes que incorporar la función system() de la librería stdlib.h (ejecuta un man 3 system). Así puedes ejecutar el intérprete perl y pasarle información por la línea de argumentos.

Las otras opciones, la de las tuberías, pues consulta pipe en el man 2, para pasarle grandes cantidades de información al programa, que tendrá que estar ejecutándose aparte, o hacer un fork() para lanzarle.

Lo más cómodo, sin duda, es la propuesta de creating021, la de intercambiar información por medio de ficheros temporales.

Y, finalmente, si quieres usar una solución verdaderamente compatible, usa solo Perl. Y teniendo en cuenta las pequeñas particularidades de cada sistema operativo.

Por ejemplo, lo que suele diferenciar a Linux/UNIX de Windows, de Mac y otros sistemas, es la nomenclatura de los subdirectorios. Bueno, para ello existen módulos como File::Spec, incluido de base, que tiene en cuenta esas 'pequeñas diferencias'.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor proxy_lainux » 2009-04-23 15:52 @703

Hola.

Entonces en vez de hacer un pipe, sería mejor que C cree un fichero, después con system() ejecutar el archivo Perl, y que Perl retome el fichero y ejecute los argumentos, después que guarde en el archivo temporal la información y que C lo retome, me lo muestre y que borre el fichero, ¿cierto?

O si no tendría que hacer un
Código: Seleccionar todo
#ifdef WIN32
pipe de win
else
pipe de linux
endif


No estaría mal practicar de todo un poco, de todas formas es un proyecto personal, aunque si llego hacer un trabajo nunca haría esto... jeje.

bueno, voy a intentar hacerlo, mientras seguiré aprendiendo a usar Perl, porque me está gustando, se me hace muy parecido a Visual Basic y C... jeje, bueno, a ver qué pasa, y gracias por los consejos.

salu2
proxy_lainux
Perlero nuevo
Perlero nuevo
 
Mensajes: 30
Registrado: 2009-04-13 21:38 @943


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron