View Full Version : Stdio e cambio del puntatore al file
Raga devo modificare un programmino (un compressore jpeg: Cjpeg scritto in C) e farlo girare su un processore sparc (Leon2)
La mia difficoltà è nel capire la seguente cosa:
Lanciandolo da shell io gli do: cjpeg image.bmp image.jpg
e porta a termine la compressione correttamente.
Quando lo carico sul processore che farà solo quello non posso + scrivergli i file immagini per cui devo andare a capire come cambiare il codice e dirgli già nel file C la path dei file immagine.
Io trovo stringhe del tipo: FILE * infile
ossia puntatori al file riferiti a ciò che ho passato da riga di comando mentre dovrei solo dire che il file è sempre e solo quello che ho su disco.
Mi aiutate per favore? E' un lavoro di tesi e mi sono bloccato qui.
Spero di essere stato chiaro
Vi ringrazio tanto
Dario
Ziosilvio
01-04-2005, 21:00
Sul Kernighan&Ritchie l'argomento file è spiegato molto bene.
Comunque, in soldoni: FILE è un tipo strutturato, che contiene informazioni relative a un file. Per gestire file su disco, si usano puntatori a FILE.
Per aprire un file, cioè per associare una zona della memoria a una zona del disco, fai:
fp = fopen(nome,modo);
Se per qualche motivo il file non può essere aperto, fopen restituisce NULL.
Per leggere un file, ci sono vari metodi: fscanf, fread, fgetc. Tieni conto che un file si legge in avanti (un po' come se fosse il nastro di una cassetta).
Quando hai finito di usare un file, devi chiuderlo, ossia liberare le risorse che sono servite per usarlo, così:
fclose(fp);
Tu devi capire bene qual'è la parte del programma in cui si decide il nome del file in input e del file in output. Per esempio, l'apertura del file da convertire potrebbe avere la forma:
infile = fopen(argv[1],"r");
Se argv[1] non viene passato direttamente, forse viene fatta una strcpy o strncpy in una zona preallocata: non ti so dire, le possibilità sono molte.
Per informazioni più approfondite, consulta il K&R, o la documentazione.
grazie
copio la parte relativa alla lettura/scrittura file
fa i controlli sulla stringa utente da tastiera e poi punta al file....mentre io vorrei fare un'assegnazione diretta al file (dato che il mio processore non puo' fare scelte autonomamente ;) )
/* Open the input file. */
if (file_index < argc) {
if ((input_file = fopen(argv[file_index], READ_BINARY)) == NULL) {
fprintf(stderr, "%s: can't open %s\n", progname, argv[file_index]);
exit(EXIT_FAILURE);
}
} else {
/* default input file is stdin */
input_file = read_stdin();
}
/* Open the output file. */
if (outfilename != NULL) {
if ((output_file = fopen(outfilename, WRITE_BINARY)) == NULL) {
fprintf(stderr, "%s: can't open %s\n", progname, outfilename);
exit(EXIT_FAILURE);
}
} else {
/* default output file is stdout */
output_file = write_stdout();
}
ove in un altro file sono state definite le void:
GLOBAL(FILE *)
read_stdin (void)
{
FILE * input_file = stdin;
#ifdef USE_SETMODE /* need to hack file mode? */
setmode(fileno(stdin), O_BINARY);
#endif
#ifdef USE_FDOPEN /* need to re-open in binary mode? */
if ((input_file = fdopen(fileno(stdin), READ_BINARY)) == NULL) {
fprintf(stderr, "Cannot reopen stdin\n");
exit(EXIT_FAILURE);
}
#endif
return input_file;
}
GLOBAL(FILE *)
write_stdout (void)
{
FILE * output_file = stdout;
grazie mille
allego il file in questione (da rinominare in .c)
come poteri rendere statica la specifica del file imamgine che invece lui legge da riga di comando?
tnx
http://files.bighosting.net/cc20704.txt
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.