Esercizio 1 Prova Pratica 25-01-2013
Jump to navigation
Jump to search
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);
}
}