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

    [c] thead e file di testo

    ciao ragazzi

    dovrei aprire dei file di testo dal master thread e poi farli leggere da un thread

    quando faccio il pthread create ci devo passare i file descriptor oppure dato che sono globali non c'è ne bisogno?

    cioè
    int file des (GLOBALE)
    ....
    ....
    pthread_create(&tid,NULL,funzione,filedes)

    oppure
    pthread_create(&tid,NULL,funzione,NULL)

    inoltre se fossero più file di testo cosa dovrei passare dato che accetta solo un valore il ptherad create? forse una struttura?

    struct filedescriptor{
    int file1
    int file2
    }

  2. #2
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ho usato solo un pò i thread in windows, e questi permettevano soltanto funzioni che avessero come argomento un void*
    Ciò non è limitativo poichè, proprio come hai detto tu, tramite una struttura puoi contenere tutti i dati che ti servono.
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  3. #3
    io sto sotto unix

    e quando parte il tread non funziona

    devo fare la open anche dentro il tread creato

    invece dovrei fare la open di due file nel master e la read nel tread creato

    io faccio così

    codice:
    void *fun(struct dati *dat)
    {
     int j;
     char cbyte[20];
     
    
       read(fd,&cbyte,20);
    
    }
    int main(int argc,char **argv)
    {
     fd=open(argv[1],O_RDONLY,0777);
     fd1=open(argv[2],O_WRONLY ,0777);
      dat.fil1=fd;
      printf("FILE DESC vale:%d\n",dat.fil1);
      dat.fil2=fd1;
      pthread_create(&tid,NULL,(void *)fun,&dat);
     }
    return;
    }
    così non va devo mettere le open pure nella funzione

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma la struttura che passi qual e'? Dove la dichiari? Dove definisci la variabile dat?

    E nel thread, quando utilizzi fd, dove lo estrai dalla struttura?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    int fd,fd1;

    struct dati{
    int fil1;
    int fil2;
    };

    pthread_t tid;
    struct dati dat;

    poi ho fatto un errore prima nella funzione ci metto dat->fil1 nella read
    codice:
    void *fun(struct dati *dat)
    {
     int j;
     char cbyte[20];
     
    
       read(dat->fil1,&cbyte,20);
    
    }

  6. #6
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Se non erro la funzione del thread non può ritornare niente e prende solo un void*
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  7. #7
    Originariamente inviato da XWolverineX
    Se non erro la funzione del thread non può ritornare niente e prende solo un void*
    No,devo passargli una struttura con i file descryptor..

    Come posso aprire un file nel master thread e farlo leggere al thread creato?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Scusa ... ma hai errori di compilazione o a runtime? Cosa succede?

    E poi e' vero ... come ti e' stato detto la funzione accetta un

    void *

    e restituisce un void *

    Quindi, a parte che manda un

    return NULL;

    nella funzione, la stessa va modificata per accettare il parametro void * e va effettuato il cast del parametro all'interno della stessa ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    non legge i file di testo

    per farlo devo mettere la open dentro la funzione e non va bene

    il master thread apre i file e il tread creato legge

    non ho capito come faccio a mettere una void nei parametri passati e come faccio a fare il cast di una struttura?

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Ma come fai a sapere che "non legge" visto che non utilizzi piu' i dati dopo averli letti?

    Infatti, il vettore

    char cbyte[20];

    lo utilizzi per leggere i dati ma non ci fai piu' nulla ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.