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

[SOLUCIONADO] Segmentation fault (core dumped)

Estas en el tema de Segmentation fault (core dumped) en el foro de C/C++ en Foros del Web. Buenas gente, tengo el siguiente código:: Código: int main() { int pid; pid = fork(); if(pid==-1){ perror("No se ha podido crear el proceso hijo\n"); } ...
  #1 (permalink)  
Antiguo 11/05/2015, 16:22
 
Fecha de Ingreso: abril-2015
Mensajes: 13
Antigüedad: 9 años
Puntos: 0
Segmentation fault (core dumped)

Buenas gente, tengo el siguiente código::

Código:
int main()
{

	 int pid;


	 pid = fork();

	 if(pid==-1){


 		perror("No se ha podido crear el proceso hijo\n");

	}

	if(pid==0){

		printf("Soy el hijo\n");
		
		FILE* archRutina = fopen("datosDeEntrada.txt","r");
		 FILE* archTemporal = fopen("archivoTemporal.txt","w");

      	        dup2(fileno(archRutina),STDIN_FILENO);
                dup2(fileno(archTemporal),STDOUT_FILENO);

		 system("/home/utnso/workspace/EjemplosC/Debug/./EjemplosC ");

		fclose(archRutina);
		fclose(archTemporal);
	}

	else{ // Cuando es distinto de cero es el padre

		printf("Soy el padre\n");
		wait(NULL);
                printf("Mi proceso hijo ya ha terminado.\n");
	}

	return 0;
}
Mi intencion es crear un proceso hijo que ejecute un programa, y hacer que el proceso padre termine despues de su hijo, por eso mismo uso el wait, al ejecutarlo tira el segmentation fault, lo debugguie y aun asi sigo sin entender porque no funciona, alguien me da una mano con esto?
  #2 (permalink)  
Antiguo 12/05/2015, 07:01
Avatar de nup_  
Fecha de Ingreso: noviembre-2010
Mensajes: 265
Antigüedad: 13 años, 5 meses
Puntos: 32
Respuesta: Segmentation fault (core dumped)

Hola:

En q parte del código da el segfault ?
prueba correr el código del hijo sin hacer el fork, quizás el problema este ahí.

S.

nup_
  #3 (permalink)  
Antiguo 12/05/2015, 13:12
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Segmentation fault (core dumped)

wait espera un pid como argumento, le mandas NULL es normal que te de un segmentation fault.

Simplemente llama wait() sin el NULL o puedes usar la funcion waitpid y enviarle los parámetros necesarios.
  #4 (permalink)  
Antiguo 12/05/2015, 13:58
 
Fecha de Ingreso: abril-2015
Mensajes: 13
Antigüedad: 9 años
Puntos: 0
Mensaje Respuesta: Segmentation fault (core dumped)

Hola, cambie el código para no depender del fork, es el siguiente

Código:

#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <sys/types.h>


int main()
{
	FILE* archDeEntrada= fopen("datosDeEntrada.txt","r");
	FILE* archTemporal = fopen("archivoTemporal.txt","w");

	char* rdo =malloc(4);

	dup2(fileno(archDeEntrada),STDIN_FILENO);
    dup2(fileno(archTemporal),STDOUT_FILENO);

    fread(rdo,5,1,archDeEntrada);

    system("/home/utnso/workspace/EjemplosC/Debug/./EjemplosC ");


	close(fileno(archDeEntrada));
	close(fileno(archTemporal));
	fclose(archDeEntrada);
	fclose(archTemporal);
	
        free(rdo);
	



	return 0;
}
sigo teniendo el mismo problema, pero esta vez se donde ocurre cuando se cierran los archivos, yo lo que busco es alimentar la entrada de datos del ejecutable EjemplosC cambiando la entrada al archivo archDeEntrada, luego la salida de lo que ejecute se redirecciona al archivoTemporal. Les paso el codigo del EjemplosC


Código:
int main(int argc, char **argv) {


	printf("%s\n",argv[1]);


return EXIT_SUCCESS;

}
En fin ya trate varias veces y me sigue dando segmentation fault, lo que deberia pasar es que en el archivo temporal termine escrita la palabra "hola".(que por cierto, es el contenido del archivo de entrada)

Etiquetas: archivo.txt, memoria
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 09:50.