Domingo 15 de Diciembre de 2024, 16:48
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Ejecutar fichero .exe
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Ejecutar fichero .exe (Leído 921 veces)
pepsenma
Nuevo Miembro
Mensajes: 2
Ejecutar fichero .exe
«
en:
Lunes 4 de Mayo de 2009, 16:43 »
0
Muy buenas,
Hace dias que me estoy comiendo el coco con esto. Necesitaria poder ejecutar un programa en C, y redireccionar su salida a traves de sockets.
Mi forma de hacerlo es via pipe/dup2/execl. No se si es la mejor manera pero es la única que se me ha ocurrido.
Les muestro mi codigo y a ver si saben donde puedo fallar. El problema es que siempre sale el error de "[Error en el paso de los fitcheros]".
if (pipe(fd) == -1){
perror("Creating pipe");
exit(1);
}
pid=fork();
switch(pid){
case -1:
write(1,"Error en el forkn", strlen("Error en el forkn"));
break;
case 0:
close(fd[0]);
dup2(fd[1], 1);
strcpy(path,"./progs/");
strcat(path,nom);
execl("./progs/","./progs/", NULL);
write(1,"[Error en el paso de los fitcheros]n",strlen("[Error en el paso de los fitcheros]n");
exit(0);
break;
default:
close(fd[1]);
i=0;
//Aqui vendria toda la lectura de la pipe y el envio a traves de sockets
}
Muchas gracias por vuestro tiempo
Tweet
m0skit0
Miembro de PLATA
Mensajes: 2337
Nacionalidad:
Re: Ejecutar fichero .exe
«
Respuesta #1 en:
Lunes 4 de Mayo de 2009, 18:22 »
0
Hola Josep
Utiliza las etiquetas de código:
Código: C
if
(
pipe
(
fd
)
==
-
1
)
{
perror
(
"Creating pipe"
)
;
exit
(
1
)
;
}
pid
=
fork
(
)
;
switch
(
pid
)
{
case
-
1
:
write
(
1
,
"Error en el forkn"
,
strlen
(
"Error en el forkn"
)
)
;
break
;
case
0
:
close
(
fd
[
0
]
)
;
dup2
(
fd
[
1
]
,
1
)
;
strcpy
(
path
,
"./progs/"
)
;
strcat
(
path
,
nom
)
;
execl
(
"./progs/"
,
"./progs/"
,
NULL
)
;
write
(
1
,
"[Error en el paso de los fitcheros]n"
,
strlen
(
"[Error en el paso de los fitcheros]n"
)
;
exit
(
0
)
;
break
;
default
:
close
(
fd
[
1
]
)
;
i
=
0
;
//Aqui vendria toda la lectura de la pipe y el envio a traves de sockets
}
Es normal que te salga "[Error en el paso de los fitcheros]" porque según tu código se ejecuta siempre esa sentencia para el proceso hijo. Supongo que habrás querido poner:
Código: C
if
(
execl
(
"./progs/"
,
"./progs/"
,
NULL
)
==
-
1
)
{
write
(
1
,
"[Error en el paso de los fitcheros]n"
,
strlen
(
"[Error en el paso de los fitcheros]n"
)
;
exit
(
0
)
;
}
Además fíjate que a
execl()
no le pasas ningún fichero a ejecutar, sólo un directorio. Además, el segundo parámetro deben ser los argumentos para el ejecutable. Resulta inútil pasarle la misma ruta que en el primer parámetro.
Fíjate también que no has cerrado la llave del
switch
.
PD: Por cierto, la ruta que especificas suena a ruta de sistema *IX, que no son Windows y cuyos ejecutables no son .exe (de hecho no llevan extensiones).
Salud
Fr33k K0mpu73r
pepsenma
Nuevo Miembro
Mensajes: 2
Re: Ejecutar fichero .exe
«
Respuesta #2 en:
Lunes 4 de Mayo de 2009, 19:37 »
0
Es normal que te salga "[Error en el paso de los fitcheros]" porque según tu código se ejecuta siempre esa sentencia para el proceso hijo. Supongo que habrás querido poner:
Código: C
if
(
execl
(
"./progs/"
,
"./progs/"
,
NULL
)
==
-
1
)
{
write
(
1
,
"[Error en el paso de los fitcheros]n"
,
strlen
(
"[Error en el paso de los fitcheros]n"
)
;
exit
(
0
)
;
}
El codigo no se ejecutaria siempre con la sentencia que copie, puesto que la instruccion execl digamos q mata al proceso q esta ejecutando. Ayudado de esto, puse el write justo después de la instrucción y así tenia la certeza que el texto de error solo salia si las cosas iban mal
Además fíjate que a
execl()
no le pasas ningún fichero a ejecutar, sólo un directorio. Además, el segundo parámetro deben ser los argumentos para el ejecutable. Resulta inútil pasarle la misma ruta que en el primer parámetro.
Disculpa, eso es fallo mio. Pegue una versión antigua y mala. Una vez lo he puesto bien sigue sin funcionar. És muy probable que el error esté aquí, alguien sabria como se llama la instruccion execl para el proposito que estoy exponiendo?
Fíjate también que no has cerrado la llave del
switch
.
Si bueno, eso es pq me deje de copiar la llave final
PD: Por cierto, la ruta que especificas suena a ruta de sistema *IX, que no son Windows y cuyos ejecutables no son .exe (de hecho no llevan extensiones).
El operativo es unix y la carpeta la cree yo llenandola de documentos compilados los cuales lo unico q hacen es sacar un texto por pantalla
Salud[/quote]
Muchas gracias de todos modos
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
C/C++
(Moderador:
Eternal Idol
) »
Ejecutar fichero .exe