Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 55
  1. #1

    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

  2. #2
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  3. #3

    ciao

    cosa c'è che non va?
    se capisco provvedo....cque mi serve davvero una mano grazie mille....


    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)

    vi posto il codice a cui mi riferisco:


    /* 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;

    per fargli aprire ad esempio c:/home/image.bmp cosa devo modificare?
    dargli un'assegnazione di tipo argv[file_index] = c:/home/image.bmp ?
    oppure devo modificare qualcosa a livelli di stdin dato che lui legge da tastiera la stringa col nome file mentre io punto al file su disco?
    Spero di essere stato chiaro
    grazie mille

  4. #4
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    manca il linguaggio nel titolo.

    ricordati di metterlo perchè da un po è una mancanza sempre meno tollerata infatti secondo il 4) punto non si potrebbe rispondere se non è tuttu apposto, cmq per assegnare una stringa ad un'altra devi usare strcpy di string.h, quindi

    codice:
    strcpy(puntatore_al_nome_del_file, "C:/path");
    spero di aver capito il problema

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  5. #5

    capito

    chiedo scusa ma sono nuovo del forum.....chiedo ad un admin di poter aggiungerci [C] davanti al titolo....

    mmm per la tua proposta potrebbe essere....ma credo che si crei ambiguità su dove lui debba puntare...
    in pratica lui legge la stringa utente (cjpeg image.bmp image.jpg) e salva il primo nome file in un parametro da passare all'fopen.
    IO semplicemente vorrei rendere statica questa assegnazione senza leggere da stringa ma dirgli il file è il: c:/home/image.bmp

    allego il file (da rinominare in .c)

    grazie mille a tutti


    http://files.bighosting.net/cc20704.txt

  6. #6
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    quello che dovresi provare è

    codice:
    strcpy(argv[file_index], "C:/home/immagine.bmp");
    oppure direttamente nel fopen fai:


    codice:
    ...
    fopen("C:/home/immagine.bmp", READ_BINARY)) 
    ...
    Io non posso provarlo il programma dato che non ho uno sparc su.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  7. #7

    grazie

    [QUOTE]Originariamente inviato da netarrow
    quello che dovresi provare è

    codice:
    strcpy(argv[file_index], "C:/home/immagine.bmp");
    oppure direttamente nel fopen fai:


    codice:
    ...
    fopen("C:/home/immagine.bmp", READ_BINARY)) 
    ...
    ma dici che così facendo lui ignora quello che precedentemente ha letto ( argv[file_index] ) ossia la stringa contenente il primo nome file?

    Note che:

    /* 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();
    }

    quindi se lui riesce ad accedere al file eseguirà la void (contenuta in un altro file):

    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;
    }

    se gli dessi:

    read_stdin (void)
    {
    FILE * input_file = c:/home/image.bmp;
    ..
    ..
    ..

    dovrebbe funzionare?
    vi ringrazio infinitamente....

  8. #8
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    Originariamente inviato da dario79
    ma dici che così facendo lui ignora quello che precedentemente ha letto ( argv[file_index] ) ossia la stringa contenente il primo nome file?

    tnx
    così facendo non userà proprio argv[file_index] per leggere, verrà aperto il file che paserai direttamente, se usi strcpy in
    argv[file_index] sarà copiato il nome come se fosse passato a parametro.

    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  9. #9
    Utente di HTML.it L'avatar di netarrow
    Registrato dal
    Apr 2004
    Messaggi
    1,425
    su questo ho dei dubbi:

    codice:
    FILE * input_file = c:/home/image.bmp;
    dovresti creare il tipo di dato file, quindi

    codice:
    ...
    FILE* input_file = malloc(sizeof(FILE));
    *input_file = fopen("c:/home/image.bmp");//e altri parametri usti
    ...
    Imparare è un'esperienza, tutto il resto è solo informazione. (Albert Einstein)

  10. #10

    ..

    Originariamente inviato da netarrow
    quello che dovresi provare è

    codice:
    strcpy(argv[file_index], "C:/home/immagine.bmp");
    oppure direttamente nel fopen fai:


    codice:
    ...
    fopen("C:/home/immagine.bmp", READ_BINARY)) 
    ...
    Io non posso provarlo il programma dato che non ho uno sparc su.
    credo che convenga la strcpy
    secondo te il punto migliore dove piazzarla dove sarebbe?
    credo che convenga fare assegnare normalmente il nome file come argv[file_index] e poi sovrascriverlo con ciò che dico io, giusto?
    ossia:

    #ifdef TWO_FILE_COMMANDLINE
    /* Must have either -outfile switch or explicit output file name */
    if (outfilename == NULL) {
    if (file_index != argc-2) {
    fprintf(stderr, "%s: must name one input and one output file\n",
    progname);
    usage();
    }
    outfilename = argv[file_index+1];
    strcpy(argv[file_index], "C:/home/immagine.bmp"); <====
    outfilename = argv[file_index]; <============
    } else {
    if (file_index != argc-1) {
    fprintf(stderr, "%s: must name one input and one output file\n",
    progname);
    usage();
    }
    }
    #else

    sei daccordo?

    ti ringrazio troppo per l'aiuto....se mi sblocco ti pago una pizza dopo la laurea!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.