Advertisement
nicb

Esercizio Slide 5

Mar 26th, 2018
186
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.48 KB | None | 0 0
  1. //testo: Scrivere un programma in C e Posix sotto Linux che stampa in output il nome del link simbolico presente nella directory corrente che si riferisce al file regolare di taglia più grande
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <unistd.h>
  6. #include <sys/stat.h>
  7. #include <dirent.h>
  8. #include <string.h>
  9. typedef struct stringa
  10.   {
  11.     char nome[20];
  12.     off_t peso;
  13.   }stringa;
  14.  
  15. int main(int argc,char **argv)
  16. {
  17.   stringa nomi={0};
  18.   struct stat info;
  19.   struct dirent *cartella;
  20.   DIR *dp;
  21.   dp=opendir("./");//apro la dir corrente
  22.     //servono i 3 file .odt nella directory corrente per poter creare in maniera corretta i link simbolici
  23.   symlink("1.odt","1_bis");
  24.   symlink("2.odt","2_bis");
  25.   symlink("3.odt","3_bis");
  26.  
  27.   while((cartella=readdir(dp))!=NULL)
  28.   {      
  29.    
  30.     stat(cartella->d_name,&info);//carico in info le informazioni relative al file puntato nella dir
  31.         if(S_ISLNK(info.st_mode)) //se il file puntato è un link simbolico
  32.     //if(cartella->d_type==DT_LNK)//TESTATO FUNZINANTE
  33.     {
  34.       if(info.st_size>nomi.peso)//verifica che il "peso" del file regolare puntato dal link simbolico sia maggiore di quello già memorizzato
  35.       {
  36.         strcpy(nomi.nome,cartella->d_name);
  37.         nomi.peso=info.st_size;
  38.         //printf("\nNOME: %s - PESO: %ld\n",nomi.nome,nomi.peso);
  39.       }
  40.      
  41.     }
  42.   }
  43.   printf("\nNOME: %s - PESO: %ld\n",nomi.nome,nomi.peso);//stampo il nome del link che punta al file regolare piùe "pesante"
  44.  
  45. return 0;
  46. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement