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

    [C] Problema stat() in ambito Client Server

    Ho un problema per quanto riguarda l'utilizzo della system call stat() in ambito server/client (premetto che il codice è in C in ambiente UNIX).

    In pratica il client deve spedire al server un pathname, il server deve verificare se tale path esiste e tornare al client varie info sul file (per precisione, uid del proprietario, dimensione, data creazione e data ultima modifica):
    Il fatto è che mi sono bloccato sulla funzione nel codice del server che è dedicata a questo. In altre parole ho capito in cosa consiste stat(), ma non so come utilizzarla.

    Qua è riportato il pezzo di codice per quanto riguarda tale funzione:
    server.c
    :
    :
    :
    void controlla (char in[], int out) { \\ in è il risultato della recv dal client (un buffer), out è il socket di destinazione (client)
    struct stat files;

    char buff_in[MAX_LENGTH];
    int len_in;
    printf ("Sto cercando il file");
    if ((stat(in,&files)) == -1) {
    perror ("Stat fallita");
    exit(5);
    }

    printf ("Informazioni per: %s \n",&in);
    printf ("dimensione: %ld \n", files.st_size); \\ non so nemmeno io cosa ho scritto qua ahah
    send(out,buff_in,len_in,0);
    }
    :
    :
    :

    I miei principali dubbi sono:
    Come utilizzo al meglio stat per recuperare solo quelle info di cui ho bisogno?
    Come faccio a mandarle al client tramite send? (infatti nel codice è sbagliato, credo)

    Grazie in anticipo, sono veramente in alto mare

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Cosa è

    files

    nel tuo codice?

    Hai consultato la documentazione di stat ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Files è un dato di tipo stat..in altre parole serve per richiamare le informazioni, come appunto files.st_size...non so se mi sono spiegato bene la struct stat è composta cosi

    struct stat {
    dev_t st_dev; /* ID of device containing file */
    ino_t st_ino; /* inode number */
    mode_t st_mode; /* protection */
    nlink_t st_nlink; /* number of hard links */
    uid_t st_uid; /* user ID of owner */
    gid_t st_gid; /* group ID of owner */
    dev_t st_rdev; /* device ID (if special file) */
    off_t st_size; /* total size, in bytes */
    blksize_t st_blksize; /* blocksize for file system I/O */
    blkcnt_t st_blocks; /* number of 512B blocks allocated */
    time_t st_atime; /* time of last access */
    time_t st_mtime; /* time of last modification */
    time_t st_ctime; /* time of last status change */
    };

    Ho guardato tutto il possibile per stat, ma forse il mio vero problema è che non so come raccogliere e mandare tutte le info prese con stat al client..

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Okay ... quindi sai che hai tutte quelle informazioni e le ottieni chiamando la stat.

    Quindi avrai

    uid del proprietario
    uid_t st_uid; /* user ID of owner */

    dimensione
    off_t st_size; /* total size, in bytes */

    data creazione
    time_t st_ctime; /* time of last status change */

    data ultima modifica
    time_t st_mtime; /* time of creation*/

    A questo punto non capisco quale sia il tuo problema della stat ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Il problema è che non so come raccoglierle per mandarle con una send! E non so se è giusto come ho utilizzato la stat dato che mi da problemi. Non so se sono giusti i valori di input.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da rainbowsix
    Il problema è che non so come raccoglierle
    Raccoglierle?

    Le hai disponibili nella variabile files ... quindi

    files.st_uid
    files.st_size
    files.st_ctime
    files.st_mtime

    saranno i dati da inviare con la send.

    mi da problemi.
    *Quali* problemi?

    per mandarle con una send!
    Quindi non sai usare la send ... ma cosa hai scritto nel client per inviare il pathname? Anche in quel caso avrai usato una send ... o no?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Umh..perché pensavo di mandare queste info con una send unica, si può fare? Senno dici di fare più send?

    Cmq grazie per avermi risposto mi puoi dire se gli input di stat sono giusti? Perche ho visto alcuni esempi ma non ho capito bene...

    Il problema è che quando lancio il server e il client mi torna il perror della stat, dopo aver scritto il path ovvio..

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da rainbowsix
    Umh..perché pensavo di mandare queste info con una send unica, si può fare?
    Puoi inviare tutta la struttura con una sola send, ma invierai anche dati che non ti interessano.

    Puoi copiare i dati in una tua struttura fatta appositamente e inviare quella ... oppure

    Senno dici di fare più send?
    Puoi usare più send ... chi lo vieta?

    Il problema è che quando lancio il server e il client mi torna il perror della stat, dopo aver scritto il path ovvio..
    Prova a scrivere a video, prima della stat, il contenuto della variabile in (quella che contiene il path) e controlla che sia corretto.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Ok ho sistemato la recv che mi dava problemi! e anche la stat! ora che l'ho sistemata pare funzionare, il problema adesso sta nel fare il cast a le varie informazioni perchè poi con la recv del client non mi stampa nulla! Quando compilo mi da warning per i diversi tipi di dato..

  10. #10
    Altro problema, la send della funzione controlla() mi torna Bad Address, non credo sia sbagliato l'output su cui scrivere, ma penso il secondo parametro, cioè quello dedicato alle informazioni. Come diavolo le invio? Questo progetto incomincia a stufarmi
    ES: send(out, files.st_size,MAX_LENGTH,0) torna errore..

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.