Difference between revisions of "Esercizio 1 Prova Pratica 25-01-2013"
Jump to navigation
Jump to search
Line 8: | Line 8: | ||
<source lang="c"> | <source lang="c"> | ||
− | |||
#include <sys/types.h> | #include <sys/types.h> | ||
#include <sys/stat.h> | #include <sys/stat.h> | ||
Line 20: | Line 19: | ||
int main(void){ | int main(void){ | ||
− | + | ||
− | + | int pid,max_size=10000; | |
− | + | char *path, *dove=malloc(max_size); | |
− | + | path="/proc"; | |
− | + | size_t size=max_size; | |
− | + | struct dirent **namelist; | |
− | + | int n; | |
+ | int c=0; | ||
+ | n = scandir(path, &namelist, 0, alphasort); | ||
if (n < 0){ | if (n < 0){ | ||
perror("scandir"); | perror("scandir"); | ||
Line 42: | Line 43: | ||
if (cartella != NULL){ | if (cartella != NULL){ | ||
+ | strcat(path,"/exe"); | ||
+ | readlink(path,dove,size); | ||
pid=atoi(namelist[n]->d_name); | pid=atoi(namelist[n]->d_name); | ||
if (pid!=0){ | if (pid!=0){ | ||
− | printf("%s ha pid: %d il path %s\n",namelist[n]->d_name,pid, | + | printf("%s ha pid: %d il path %s\n",namelist[n]->d_name,pid,dove); |
} | } | ||
} | } | ||
− | + | free(path); | |
} | } | ||
printf("%d",c); | printf("%d",c); | ||
} | } | ||
+ | } | ||
</source> | </source> |
Latest revision as of 10:13, 14 April 2015
Soluzione di ababa
Scrivere un programma listexe che fornisca in output l'elenco dei processi attivi nel sistema mettendo in output per ogni processo il pid e il path dell'eseguibile. L'informazione puo' essere trovata scandendo la directory proc, infatti ad ogni processo attivo corrisponde una directory in /proc che ha come nome il numero del processo (ad esempio al processo 9801 corrisponde la directory /proc/9801) e all'interno di queste directory il file exe e' un link simbolico all'eseguibile.
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <error.h>
#include <fcntl.h>
#include <string.h>
#include <dirent.h>
int main(void){
int pid,max_size=10000;
char *path, *dove=malloc(max_size);
path="/proc";
size_t size=max_size;
struct dirent **namelist;
int n;
int c=0;
n = scandir(path, &namelist, 0, alphasort);
if (n < 0){
perror("scandir");
}
else{
while(n--){
DIR *cartella;
path=malloc(1000);
path[0]='\0';
strcat(path,"/proc/");
strcat(path,namelist[n]->d_name);
//printf("%s\n",path);
cartella=opendir(path);
if (cartella != NULL){
strcat(path,"/exe");
readlink(path,dove,size);
pid=atoi(namelist[n]->d_name);
if (pid!=0){
printf("%s ha pid: %d il path %s\n",namelist[n]->d_name,pid,dove);
}
}
free(path);
}
printf("%d",c);
}
}