Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [c]funzione scrivere su file di testo

    ho un problema che non mi sta facendo dormire la
    notte. Ho la seguente funzione


    codice:
    void scrivifile(void *x){
       int i=(int)x;
       
       printf("sono il thread %d",i);
       //qu devo mettere una funzione che mi permette di scrivere su un file di testo "sono il thread"
    dove commentato devo inserire una funzione che mi permetta di scrivere su un file di testo.quale funzione posso usare?premetto che lavoro sotto linux.
    Ovviamente il puntatore a file l'ho dichiarato ed ho aperto il file con fopen nel main.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    20
    Forse non ho capito bene, e la faccio facile, ma credo ti basti fare una cosa del tipo

    codice:
    fprintf(x, "%s %d", s, i);
    Dove s è una stringa, che avrai iniziallizzato un attimo prima.

    Oppure, se la stringa è fissa, puoi anche evitare di crearti una variabile ed iniziallizarla, e fare semplicemente così

    codice:
    fprintf(x, "Sono il thread %d", i);
    Anche se credo che il puntatore a x (che immagino rappresenti il nome logico del file) che passi alla funzione, non dovrebbe essere di tipo "void" ma di tipo "FILE".

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    20
    Anzi, no, "*x" è un intero che passi dal main. Quindi, comunque dovresti passargli il file che hai aperto, altrimenti non potrà scrivere su nulla.

  4. #4
    no x non rappresenta il puntatore al file bensi il numero del thread che passo che per chi conosce i posix thread deve essere passato a void e poi fatto il cast.comunque vedrò di provare la funzione che mi hai consigliato.ti faccio sapere

  5. #5
    nella mia implementazione non occorre passare il puntatore al file dentro la funzione perchè il puntatore FILE *fp lo dichiaro glbalmente ed fopen la passo all'interno del main dove poi richiamerò la funzione stampa

  6. #6
    ok problema risolto.ma il problema adesso diventa nella lettura del file. come posso fare????
    il mio file di testo è il seguente:

    codice:
    sono il thread 1
    sono il thread 2
    sono il thread 3
    purtroppo questo file di testo è costituito da spazi e ritorni a capo. quale funzione posso usare?forse fread?fscanf?

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    20
    Questo ti legge una riga alla volta, e ti memorizza le parole nelle variabili che gli passi, fino alla fine del file.

    codice:
    char s1[5], s2[3], s3[7];
    int n;
    while(!feof(fp))
    {
        fscanf("%s %s %s %d", &s1, &s2, &s3, &n);
    }
    Questo, invece, legge un carattere per volta, e lo restituisce

    codice:
    char c;
    while(!feof(fp))
    {
        c=fgetc(fp);
    }
    A seconda di quel che devi fare, scegli una delle due.

    C'è, poi, anche fgets(), che però non ricordo a cosa serva, ne come si usa. Magari googla.

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da mazzy89
    ok problema risolto.ma il problema adesso diventa nella lettura del file. come posso fare????
    il mio file di testo è il seguente:
    Come devi leggerlo questo file? Riga per riga? Solo i numeri? A seconda di ciò di cui hai bisogno puoi ricorrere ad una soluzione piuttosto che ad un'altra. Se devi leggerlo riga per riga, come è probabile, usa la fgets().
    Comunque non dichiarare variabili globali quando non ne sei estremamente costretto, soprattutto quando lavori con i thread dove tutti possono modificare tutto. "Impacchetta" il puntatore al file in una struct insieme al numero del thread e passagli la struct come parametro.
    every day above ground is a good one

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.