PDA

Ver la versión completa : SDL: stdout.txt y stderr.txt en la GP32



A600
05/10/2005, 02:54
Estoy tratando de portar el Hexen SDL a la GP32. En principio, compila perfecto para Windows y GP32. Funciona en Windows pero resetea la GP32 :(

¿Hay alguna forma de que se graben los ficheros stdout.txt y stderr.txt en la GP32 para saber qué es lo que está pasando?

Eskema
05/10/2005, 03:13
¿Poniendo fprintf(stderr,"Error: %s\n", SDL_GetError()); no consigues escribir el stderr?

A600
05/10/2005, 03:40
Esa función funciona perfectamente en Windows, pero en la GP32 no aparece el stderr.txt por ningún lado :(

Propeller
05/10/2005, 04:10
Esa función funciona perfectamente en Windows, pero en la GP32 no aparece el stderr.txt por ningún lado :(

Curiosidad: Has hecho un gpfatinit() de esos?

Propeller

A600
05/10/2005, 04:39
Curiosidad: Has hecho un gpfatinit() de esos?


Pues no, aunque no creo que haga falta con las librerías de chui, porque puedo acceder a los ficheros de la SMC sin problemas. De todas formas lo probaré.

El problema creo que está en el fichero stderr, que en Windows se crea y se cierra automáticamente pero en la GP32 no. De hecho, la función fprintf(stderr,"Error: %s\n", SDL_GetError()) funciona en la GP32 si creo un fichero distinto del stderr y añado el código para crearlo y cerrarlo, pero es un coñazo tener que modificar todos los fprintf del código. Por eso me interesa saber si hay alguna manera de hacer funcionar el stderr en la GP32.

schan
05/10/2005, 05:29
El problema creo que está en el fichero stderr, que en Windows se crea y se cierra automáticamente pero en la GP32 no

A unas malas, quizas podrias crear y cerrar ese fichero "a mano"

A600
05/10/2005, 06:26
A unas malas, quizas podrias crear y cerrar ese fichero "a mano"

Eso también lo he intentado y no hay tu tía, porque el stderror ya está declarado.

schan
05/10/2005, 07:22
stderr es un puntero? aunque esté declarado, se podría hacer apuntar a otro lado? (a uno que abras tu)

A600
05/10/2005, 09:23
stderr es un puntero? aunque esté declarado, se podría hacer apuntar a otro lado? (a uno que abras tu)

Buscando en los newsgroups he encontrado este ejemplo:


/* FREOPEN.C: This program reassigns stderr to the file
* named FREOPEN.OUT and writes a line to that file.
*/


#include <stdio.h>
#include <stdlib.h>


FILE *stream;


void main( void )
{
/* Reassign "stderr" to "freopen.out": */
stream = freopen( "freopen.out", "w", stderr );


if( stream == NULL )
fprintf( stdout, "error on freopen\n" );
else
{
fprintf( stream, "This will go to the file 'freopen.out'\n" );
fprintf( stdout, "successfully reassigned\n" );
fclose( stream );
}
system( "type freopen.out" );


}


A ver si tengo tiempo mañana y lo pruebo en la gp32

chui
05/10/2005, 23:07
Ya te digo yo que ese 'system "type manolito"' no te rula ni pa dios.

Puedes rederigir el stdout o el stderr sin problemas, mira este ejemplo:



#include<stdio.h>

int main (int nargs,char **arg)
{
freopen("misalida.out","w",stdout);
printf("Hola mundo!\n");
fclose(stdout);
}



Haz freopen para stdout y stderr en la entrada del programa (main) y fclose en la salida y antes de todos los exit().

A600
06/10/2005, 01:30
Ya te digo yo que ese 'system "type manolito"' no te rula ni pa dios.

J0der chui, el C no es lo mío pero hasta ahí llego [wei4]

Muchas gracias por el ejemplo. :musico: