Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //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
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <sys/stat.h>
- #include <dirent.h>
- #include <string.h>
- typedef struct stringa
- {
- char nome[20];
- off_t peso;
- }stringa;
- int main(int argc,char **argv)
- {
- stringa nomi={0};
- struct stat info;
- struct dirent *cartella;
- DIR *dp;
- dp=opendir("./");//apro la dir corrente
- //servono i 3 file .odt nella directory corrente per poter creare in maniera corretta i link simbolici
- symlink("1.odt","1_bis");
- symlink("2.odt","2_bis");
- symlink("3.odt","3_bis");
- while((cartella=readdir(dp))!=NULL)
- {
- stat(cartella->d_name,&info);//carico in info le informazioni relative al file puntato nella dir
- if(S_ISLNK(info.st_mode)) //se il file puntato è un link simbolico
- //if(cartella->d_type==DT_LNK)//TESTATO FUNZINANTE
- {
- if(info.st_size>nomi.peso)//verifica che il "peso" del file regolare puntato dal link simbolico sia maggiore di quello già memorizzato
- {
- strcpy(nomi.nome,cartella->d_name);
- nomi.peso=info.st_size;
- //printf("\nNOME: %s - PESO: %ld\n",nomi.nome,nomi.peso);
- }
- }
- }
- printf("\nNOME: %s - PESO: %ld\n",nomi.nome,nomi.peso);//stampo il nome del link che punta al file regolare piùe "pesante"
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement