Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Problemon con C en Linux! Ayuda

Estas en el tema de Problemon con C en Linux! Ayuda en el foro de C/C++ en Foros del Web. hola a todos! tengo que hacer un programita y estoy teniendo un problema y no se como solucionarlo. la cosa es asi.. tengo un programa ...
  #1 (permalink)  
Antiguo 23/09/2007, 15:11
 
Fecha de Ingreso: octubre-2004
Mensajes: 107
Antigüedad: 20 años, 2 meses
Puntos: 0
Problemon con C en Linux! Ayuda

hola a todos!
tengo que hacer un programita y estoy teniendo un problema y no se como solucionarlo.
la cosa es asi..

tengo un programa que crea 3 procesos hijos utilizando fork(). cada hijo carga una imagen con excecve().

cada imagen cargada realiza un ciclo y a lo ultimo necesito que se ejecute el nano (editor de texto). entonces hago un system("nano")... para que se escriba por consola.. el problema es que cuando corro el programa en la consola.. hace todo bien pero en la parte que deberia llamar al nano me dice:

Error opening terminal : Unknown

no se como solucionarlo... segun lei creo que el problema es con el ambiente... pero no se como solucionarlo.

me pueden dar una mano?? gracias!!
  #2 (permalink)  
Antiguo 24/09/2007, 15:27
Avatar de luiscardozo  
Fecha de Ingreso: septiembre-2007
Ubicación: Ciudad del Este
Mensajes: 7
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Problemon con C en Linux! Ayuda

podrías postear algo del código? no entendí muy bien lo que necesitás.
Llamás a nano con execve dentro de uno de los procesos hijos? Fijate que el execve reemplaza "el proceso hijo" por lo que querés ejecutar.
Según $ man execve:
Cita:
execve() does not return on success, and the text, data, bss, and stack of the call-
ing process are overwritten by that of the program loaded. The program invoked
inherits the calling process's PID, and any open file descriptors that are not set
to close-on-exec. Signals pending on the calling process are cleared. Any signals
set to be caught by the calling process are reset to their default behaviour. The
SIGCHLD signal (when set to SIG_IGN) may or may not be reset to SIG_DFL.
  #3 (permalink)  
Antiguo 24/09/2007, 16:41
 
Fecha de Ingreso: octubre-2004
Mensajes: 107
Antigüedad: 20 años, 2 meses
Puntos: 0
Re: Problemon con C en Linux! Ayuda

el programa principal es este:

Código:
#include <stdio.h>

int main(){

int p1,p2,p3;
FILE *Salida;

Salida = fopen("salida.txt","w+");
fclose(Salida);
p1=fork();
if (p1==0){
	execve("./hijo1",NULL,0);
}
else {
   	p2=fork();
   	if(p2==0){
		execve("./hijo2",NULL,0);
	}
	else {
		p3=fork();
   		if(p3==0){
			execve("./hijo3",NULL,0);
		}
		else {
			wait(NULL);wait(NULL);wait(NULL);
			Salida = fopen("salida.txt","a");
			fprintf(Salida,"Se ha finalizado la actividad.\n");
			fclose(Salida);
   		}
	}
}
return 0;
}
y aca el codigo de 1 hijo (los otros hacen lo mismo).

Código:
#include <stdio.h>
#include <stdlib.h>

main()
{    
	int i;
	FILE *Salida;
	Salida = fopen("salida.txt","a");
	for(i=1;i<=1000;i++){
		if((i==250) || (i==500) || (i==750))
		{
		printf("Estoy realizando mi trabajo, id: %d, identificación interna: A.\n",getpid());
		}
	};
	fprintf(Salida,"Fin de la ejecucion del proceso A.\n");
	system("nano");
	fclose(Salida);

}
  #4 (permalink)  
Antiguo 24/09/2007, 19:22
Avatar de luiscardozo  
Fecha de Ingreso: septiembre-2007
Ubicación: Ciudad del Este
Mensajes: 7
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Problemon con C en Linux! Ayuda

no entiendo por qué querés abrir el nano después de cada ejecución.

Como no tengo el nano, reemplacé "nano" por "vim", probé el código y ejecutó bien (salvo porque me abrió el vim 3 veces de seguido y parece que los 3 procesos se molestaban para usar la terminal). Entonces probé reemplazando "vim" por "man printf", y ahí me dió el error "WARNING: terminal is not fully functional".

Creo que el problema está en eso: en que los 3 procesos pretenden trabajar a la vez con la terminal; el primero debería conseguirlo, pero los otros 2 saldrían con fallos al no poder usar la terminal.

Cuál es la salida de tu programa? Por qué no abrís el nano en el programa principal, después de los wait()s?
  #5 (permalink)  
Antiguo 24/09/2007, 21:35
 
Fecha de Ingreso: octubre-2004
Mensajes: 107
Antigüedad: 20 años, 2 meses
Puntos: 0
Re: Problemon con C en Linux! Ayuda

es parte de un proyecto que nos pidieron en la universidad... hay que abrir nano ahi en esa parte!
pero sigo sin hacerlo andar!!

como son 3 hijos y cada uno ejecuta lo mismo, luego en la terminal salen los 3 errores de que no se pudo ejecutar nano Error opening terminal : Unknown.

si ejecuto con system() algun comando como LS, PS o cualquiera si anda! el problema es cuando trato de correr algun programa.. como nano, kate, etc...

ya no se que mas hacer... probamos reemplazar el execve() del proceso padre por otras variantes, y sigue sin andar :S

helpppp
  #6 (permalink)  
Antiguo 24/09/2007, 21:59
Avatar de luiscardozo  
Fecha de Ingreso: septiembre-2007
Ubicación: Ciudad del Este
Mensajes: 7
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Problemon con C en Linux! Ayuda

Cita:
Iniciado por tksko Ver Mensaje
es parte de un proyecto que nos pidieron en la universidad... hay que abrir nano ahi en esa parte!
pero sigo sin hacerlo andar!!
Pues creo que tendrías que pedirle a tu profesor una muestra del ejecutable funcionando, porque no tiene mucho sentido eso, jeje.

Cita:
si ejecuto con system() algun comando como LS, PS o cualquiera si anda! el problema es cuando trato de correr algun programa.. como nano, kate, etc...
Justamente, comandos como ls o ps simplemente envían información a la salida estándar (por defecto), pero otros como nano requieren "abrir la terminal" para controlarle mejor, es una interfaz tipo Ncurses, o sea, requiere controlar la posición del cursor en pantalla, teclado, talvez el mouse, etc., por lo que se da una "pelea por los recursos".
Lo que pide no tiene mucho sentido, a no ser que pongas algún bloqueo para que cada hijo verifique si no hay otro hijo usando la terminal.
  #7 (permalink)  
Antiguo 24/09/2007, 22:14
 
Fecha de Ingreso: octubre-2004
Mensajes: 107
Antigüedad: 20 años, 2 meses
Puntos: 0
Re: Problemon con C en Linux! Ayuda

si pero de todos modos si mando system("nano &"), osea, que corra en background.. no deberia mostrarse por pantalla y quedar "corriendo" en el fondo.. pero tampoco funciona asi..

voy a ver si le pregunto a mi profesora..pero nunca nos quiere responder, quiere que investiguemos pero ya no se que mas hacer!

gracias!
  #8 (permalink)  
Antiguo 26/09/2007, 08:49
Avatar de luiscardozo  
Fecha de Ingreso: septiembre-2007
Ubicación: Ciudad del Este
Mensajes: 7
Antigüedad: 17 años, 3 meses
Puntos: 0
Re: Problemon con C en Linux! Ayuda

Estuve probando ejecutar kate desde los procesos hijos, y me da el error:
Cita:
kate: cannot connect to X server
O sea, parece ser algo relacionado al entorno en el que se ejecuta el subproceso (por ejemplo, aparentemente en este caso no está definida la variable de entorno $DISPLAY), que sí está definida en la shell desde donde ejecuto.

Deberíamos leer más sobre el entorno en que se ejecutan los comandos llamados por execve() y system(). Ahora mismo estoy corto de tiempo, pero si encuentro algo te aviso.

Si encontrás la respuesta, sería interesante que postearas aquí, jeje

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:23.